hadoop集群搭建

本文介绍了Hadoop的组成,包括HDFS、YARN和MapReduce,并详细阐述了HDFS的工作原理。接着,概述了Hadoop集群搭建的过程,包括创建用户、安装软件、配置和启动集群的步骤,以及Hadoop完全初始化和常见操作。最后,提到了针对大量小文件的优化策略。

什么是hadoop?

Hadoop无非就是:HDFS(文件系统),yarn(任务调配),mapReduce(编程模型,大数据并行运算),我们安装完hadoop就已经包括了以上;

Hadoop集群其实就是HDFS集群。

HDFS:其实就是个文件系统,和fastDFS类似,像百度云,阿里云等就是个文件存储系统,当然一般如果仅仅是为了用来存储文件的话直接fastDFS这个就已经够了,HDFS目的不单单是用来存储文件这么简单,它还涉及分布式计算等。

HDFS工作原理:

HDFS分有NameNode和DataNode,NameNode是整个文件系统目录,基于内存存储,存储的是一些文件的详细信息,比如文件名、文件大小、创建时间、文件位置等。Datanode是文件的数据信息,也就是文件本身,不过是分割后的小文件。上面图已经有做了介绍了,这里就不再赘述了。

Yarn:是一种新的 Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

MapReduce:MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

集群搭建过程:

1.专有用户的创建

//创建hadoop用户
[root@Linux1 ~]# useradd hadoop
[root@Linux1 ~]# passwd hadoop

//新用户没有sudo权限
[hadoop@Linux1 ~]$ sudo cat /etc/sudoers
[sudo] hadoop 的密码:
hadoop 不在 sudoers 文件中。此事将被报告。

//为用户添加sudo权限
[hadoop@Linux1 ~]$ su root
[root@Linux1 hadoop]# vim /etc/sudoers
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
//此处添加
hadoop  ALL=(ALL)       ALL

//将sudoers发送到别的服务器
[hadoop@Linux1 ~]$ sudo scp /etc/sudoers linux2:/etc/sudoers
[hadoop@Linux1 ~]$ sudo scp /etc/sudoers linux3:/etc/sudoers
[hadoop@Linux1 ~]$ sudo scp /etc/sudoers linux4:/etc/sudoers

2.专有用户下添加文件夹apps,便于安装软件

[hadoop@Linux1 ~]$ mkdir apps

3.传输编译后的cenos-6.5-hadoop-2.6.4.tar.gz到用户目录下 

[hadoop@Linux1 ~]$ ll
总用量 176580
drwxrwxr-x. 2 hadoop hadoop      4096 8月  26 07:31 apps
-rw-r--r--. 1 root   root   180813065 8月  26 07:05 cenos-6.5-hadoop-2.6.4.tar.gz

//解压到apps文件夹下
[hadoop@Linux1 ~]$ tar -zxvf cenos-6.5-hadoop-2.6.4.tar.gz -C apps/

4.五处配置

//1.hadoop-env.sh 实际工作中,需要ssh远程启动hadoop,这时$JAVA_HOME不生效,所以需要直接配置
    vi apps/hadoop-2.6.4/etc/hadoop/hadoop-env.sh
    [hadoop@Linux1 ~]$ cd apps/hadoop-2.6.4/etc/hadoop/
    [hadoop@Linux1 hadoop]$ echo $JAVA_HOME
    /usr/local/jdk1.7.0_65
    [hadoop@Linux1 hadoop]$ vi hadoop-env.sh
    #export JAVA_HOME=${JAVA_HOME}
    export JAVA_HOME=/usr/local/jdk1.7.0_65
    export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"

//2.core-site.xml
    vi apps/hadoop-2.6.4/etc/hadoop/core-site.xml
    [hadoop@Linux1 hadoop]$ vi core-site.xml
    <!-- 文件系统有hdfs,gfs,tfs,nfs 需要指定HADOOP所使用的文件系统schema(URI)-->
    <property>
	    <name>fs.defaultFS</name>//选择默认hdfs
	    <value>hdfs://linux1:9000</value>//uri统一资源定位符,HDFS的老大(NameNode)的地址
    </property>
    <!-- 指定hadoop运行时产生文件的存储目录 -->//每一台服务器都有 进程数据目录
    <property>
	    <name>hadoop.tmp.dir</name>
	    <value>/home/hadoop/hdpdata</value>
    </property>

    //eg:
    在/home/hadoop/hdpdata/dfs/中
    data(启动datanode的服务器中有)
    name(namenode的服务器中有)
    namesecondary(secondnamenode的服务器中有)

    如果在下个配置3中,如果配置了dfs.name.dir
    则namenode的服务器中没有/home/hadoop/hdpdata/
    如果没有配置,则走上面默认的配置
//3.hdfs-site.xml  
    vi apps/hadoop-2.6.4/etc/hadoop/hdfs-site.xml
    [hadoop@Linux1 hadoop]$ vi hdfs-site.xml 
    <!-- 指定HDFS副本的数量 -->
    <property>
		<name>dfs.replication</name>
		<value>2</value>//默认为3
	</property>
    //secondary namenode的ip,不配置的话,为0.0.0.0
    <property>
		<name>dfs.secondary.http.address</name>
		<value>linux2:50090</value>
	</property>
    //元数据在内存中,每一个操作写入edits,edits放到多个磁盘下,如果不进行配置,则默认配置为2中core-site.xml的hadoop运行时产生文件的存储目录 /home/hadoop/hdpdata/dfs/name
    <property>
		<name>dfs.name.dir</name>
		<value>/home/hadoop/name1,/home/hadoop/name2</value>
	</property>

//4.mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
	mv mapred-site.xml.template mapred-site.xml
	vim mapred-site.xml
	<!-- 指定mr运行在yarn上 -->将mapreduce放在yarn资源调度平台上运行,yarn将mr分配给内存,cpu再启动程序(集群上分布运行)
	<property>//不配置的话,默认为local,mapreduce会单机跑(单机)
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>

//5.yarn-site.xml
	<!-- 指定YARN的老大(ResourceManager)的地址 -->
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>linux1</value>
	</property>
	<!-- reducer获取数据的方式 -->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>  

5.配置完成后,将文件夹apps发送到其余服务器

[hadoop@Linux1 ~]$ scp -r apps/ linux2:/home/hadoop/
[hadoop@Linux1 ~]$ scp -r apps/ linux3:/home/hadoop/
[hadoop@Linux1 ~]$ scp -r apps/ linux4:/home/hadoop/

6.配置环境变量--格式化--启动集群

将hadoop添加到环境变量
	[hadoop@Linux1 ~]$ sudo vi /etc/profile
	vim /etc/proflie
		export JAVA_HOME=/usr/java/jdk1.7.0_65
		export HADOOP_HOME=/home/hadoop/apps/hadoop-2.6.4/
        export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

        export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
		export HADOOP_OPTS=-Djava.library.path=$HADOOP_HOME/lib
        //桌面版只能把$PATH放最后
		export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
	source /etc/profile
	
格式化namenode(是对namenode进行初始化)生成初始目录初始账本
	hdfs namenode -format (hadoop namenode -format)//两个命令相同
		

//配置slaves,启动datanode,方便自动化启动脚本的运行
vi apps/hadoop-2.6.4/etc/hadoop/slaves
[hadoop@Linux1 ~]$ cd apps/hadoop-2.6.4/etc/hadoop/
[hadoop@Linux1 hadoop]$ 

linux2
linux3
linux4

启动hadoop
	先启动HDFS
	sbin/start-dfs.sh
		
	再启动YARN
	sbin/start-yarn.sh

    也可以一步启动
    [hadoop@Linux1 ~]$ apps/hadoop-2.6.4/sbin/start-all.sh
    start-all.sh
    stop-all.sh 
		
验证是否启动成功
		使用jps命令验证
		27408 NameNode
		28218 Jps
		27643 SecondaryNameNode
		28066 NodeManager
		27803 ResourceManager
		27512 DataNode
	
		http://linux1:50070 (HDFS管理界面)
		http://linux1:8088 (MR管理界面)

hadoop完全初始化

//完全删除每一个服务器下的初始目录hdpdata文件夹
rm -rf /home/hadoop/hdpdata/
//格式化namenode(是对namenode进行初始化)生成初始目录
hadoop namenode -format

hdfs操作

//查看根目录
[hadoop@Linux1 ~]$ hadoop fs -ls /

//将文件放入HDFS根目录下,128mb为一块
[hadoop@Linux1 ~]$  hadoop fs -put cenos-6.5-hadoop-2.6.4.tar.gz /

//从HDFS中获取文件,自动拼接
[hadoop@Linux1 ~]$ hadoop fs -get /cenos-6.5-hadoop-2.6.4.tar.gz
            
//在hdfs上创建目录
[hadoop@Linux1 ~]$ hadoop fs -mkdir -p /aaa/bbb/cc/dd
                
//删除文件或文件夹(删除了bbb)
[hadoop@Linux1 ~]$ hadoop fs -rm -r /aaa/bbb/

常见问题

1/运行mr程序出错
connecting to resoucemanager 
retrying ....  
retrying .....

原因是没有启动yarn或者启动失败

2/初始化工作目录结构
hdfs namenode -format 只是初始化了namenode的工作目录
而datanode的工作目录是在datanode启动后自己初始化的

3/datanode不被namenode识别的问题
namenode在format初始化的时候会形成两个标识:
blockPoolId:
clusterId:

新的datanode加入时,会获取这两个标识作为自己工作目录中的标识

一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然
持有原来的id,就不会被namenode识别


4/datanode下线后多久看到效果
datanode不是一下线就会被namenode认定为下线的,有一个超时时间


5/关于副本数量的问题
副本数由客户端的参数dfs.replication决定(优先级: conf.set >  自定义配置文件 > jar包中的hdfs-default.xml)

运行

//hdfs上创建原始文件所在目录
hadoop fs -mkdir -p /flowsum/input
vi flow.data
//将文件数据放入该目录
$ hadoop fs -put flow.data /flowsum/input



//导出 jar file ,需要指定运行类,两个目录参数
java -cp hadoop.jar cn.itcast.bigdata.mr.provinceflow.FlowCount /flowsum/input /flowsum/output
//java -cp 运行,会缺少jar包
    //linux下,对于需要依赖的jar包使用-cp ,多个jar包之间使用冒号:java命令运行时注意.:
    javac -cp  .:httpcore-4.4.1.jar:httpclient-4.4.1.jar:commons-logging-1.2.jar  TestIPMain.java
//hadoop jar .....会将hadoop环境中的jar包引入
hadoop jar hadoop.jar cn.itcast.bigdata.mr.provinceflow.FlowCount /flowsum/input /flowsum/output

//导出 runnable  jar file ,不需要指定运行类
java -jar hadoop.jar /flowsum/input /flowsum/output
//hadoop jar .....会将hadoop环境中的jar包引入
hadoop jar hadoop.jar /flowsum/input /flowsum/output

关于大量小文件的优化策略:

1.默认情况下,textinputformat对任务的切片机制是按文件规则切片,不管文件大小,都会是一个单独切片,都会交给一个maptask

2.优化策略:

    1.最好办法:将小文件先合并成大文件,再上传hdfs做后续分析

    2.补救措施:如果已经是大量小文件再hdfs中了,可以使用另一种inputformat来做切片,它的切片逻辑和fileinputformat不同,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个maptask

 

 

 

<think>好的,用户想了解如何搭建Hadoop集群的详细步骤和配置。首先,我需要回忆之前学过的Hadoop集群搭建知识,确保步骤正确。记得Hadoop集群通常分为完全分布式模式,需要多台机器,比如hadoop102、hadoop103、hadoop104这样的命名。用户提供的引用里提到了设置这些节点,并测试SSH连接,还有上传安装包。可能这些是关键的步骤。 接下来,我应该按照逻辑分步骤讲解。首先准备环境,包括服务器、Java安装、主机名和hosts文件的配置,以及SSH免密登录的设置。这些都是搭建集群的基础。然后,安装Hadoop,解压安装包,配置环境变量。接下来是核心的配置文件修改,比如hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml以及workers文件。每个配置文件的作用需要简要说明,比如core-site.xml设置NameNode地址,hdfs-site.xml配置副本数等。 配置完成后,需要同步到其他节点,这里可以用scp命令或者rsync。然后初始化HDFS,启动集群,最后验证是否成功,比如jps查看进程,或者访问Web界面。可能用户在实际操作中会遇到问题,比如SSH连接失败,端口占用,或者配置文件错误,这些常见问题应该提及解决方案。 另外,用户的问题可能涉及到具体的配置参数,比如副本数设置成多少合适,或者资源管理器的配置,这些需要根据集群规模给出建议。比如小型集群副本数可以设为2,但生产环境通常3。还有安全模式的问题,可能需要关闭防火墙或者配置SELinux。 需要确保所有的命令和路径都是正确的,比如JAVA_HOME的路径是否正确,Hadoop的安装目录是否一致。同时,用户可能需要知道如何验证集群是否正常工作,比如运行一个测试的MapReduce作业,或者检查日志文件。 最后,生成相关问题的时候,应该围绕用户可能进一步关心的问题,比如配置参数优化、添加节点、安全配置、性能调优等。这些能帮助用户更深入理解集群管理和维护。</think>### Hadoop集群搭建步骤详解 #### 一、环境准备(3节点示例) 1. **服务器规划** - hadoop102(NameNode + DataNode) - hadoop103(ResourceManager + DataNode) - hadoop104(SecondaryNameNode + DataNode) 2. **基础配置** - 所有节点安装JDK 8+并配置环境变量: ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 ``` - 配置主机名和/etc/hosts文件: ```bash 192.168.1.102 hadoop102 192.168.1.103 hadoop103 192.168.1.104 hadoop104 ``` - 配置SSH免密登录: ```bash ssh-keygen -t rsa ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104 ``` #### 二、Hadoop安装与配置 1. **解压安装包** ```bash tar -zxvf hadoop-3.3.6.tar.gz -C /opt/module/ ``` 2. **配置环境变量** ```bash export HADOOP_HOME=/opt/module/hadoop-3.3.6 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ``` 3. **修改核心配置文件** - `etc/hadoop/hadoop-env.sh`: ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 ``` - `etc/hadoop/core-site.xml`: ```xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> </configuration> ``` - `etc/hadoop/hdfs-site.xml`: ```xml <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration> ``` #### 三、集群同步与启动 1. **分发配置到所有节点** ```bash scp -r /opt/module/hadoop-3.3.6 hadoop103:/opt/module/ scp -r /opt/module/hadoop-3.3.6 hadoop104:/opt/module/ ``` 2. **初始化HDFS** ```bash hdfs namenode -format ``` 3. **启动集群** ```bash start-dfs.sh # 启动HDFS start-yarn.sh # 启动YARN ``` #### 四、验证集群状态 1. **进程验证** ```bash jps # hadoop102应显示NameNode/DataNode # hadoop103应显示ResourceManager/NodeManager ``` 2. **Web界面验证** - HDFS状态:`http://hadoop102:9870` - YARN状态:`http://hadoop103:8088` #### 五、常见问题解决 1. **SSH连接失败** - 检查防火墙状态:`systemctl stop firewalld` - 验证公钥是否完整复制到`~/.ssh/authorized_keys` 2. **端口冲突** - 使用`netstat -tunlp | grep 8020`检查默认端口占用情况 3. **HDFS无法格式化** - 删除所有节点的`/tmp/hadoop-*`目录后重试[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值