本文旨在提供最基本的,可以用于在生产环境进行Hadoop、HDFS分布式环境的搭建,对自己是个总结和整理,也能方便新人学习使用。
一、基础环境
在Linux上安装Hadoop之前,需要先安装两个程序:
1.1 安装说明
1. JDK 1.6或更高版本(本文所提到的安装的是jdk1.8);
2. SSH(安全外壳协议),推荐安装OpenSSH。
下面简述一下安装这两个程序的原因:
1. Hadoop是用Java开发的,Hadoop的编译及MapReduce的运行都需要使用JDK。
2. Hadoop需要通过SSH来启动salve列表中各台主机的守护进程,因此SSH也是必须安装的,即使是安装伪分布式版本(因为Hadoop并没有区分集群式和伪分布式)。对于伪分布式,Hadoop会采用与集群相同的处理方式,即依次序启动文件conf/slaves中记载的主机上的进程,只不过伪分布式中salve为localhost(即为自身),所以对于伪分布式Hadoop,SSH一样是必须的。
1.1 JDK的安装与配置
1、上传压缩包
我这里使用的是xftp 5 工具 上传jdk-8u191-linux-x64.tar.gz压缩包 到指定位置
我是在/opt/workspace/
2、解压压缩包
tar -zxvf jdk-8u191-linux-x64.tar.gz
3、重命名
mv jdk-8u191-linux-x64.tar.gz jdk.8
4、配置环境变量 vi 或者vim
vi /etc/profile
添加 export JAVA_HOME=/opt/workspace/jdk1.8
export CLASSPATH=${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib
export PATH=$PATH:${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin
保存退出 并刷新 source /etc/profile
然后试一下是否成功 java-version
二、Host配置
由于我搭建Hadoop集群包含三台虚拟机,所以需要修改调整各台机器的hosts文件配置,进入/etc/hosts,配置主机名和ip的映射,命令如下:
vim /etc/hosts
如果没有足够的权限,可以切换用户为root。或者 chmod 777 需要权限的文件
三台机器的内容统一增加以下host配置:
可以通过hostname来修改服务器名称为master、slave1、slave2
hostname master
三、Hadoop的安装与配置
3.1 创建文件目录
为了便于管理,给Master的hdfs的NameNode、DataNode及临时文件,在用户目录下创建目录:
/data/hdfs/name
/data/hdfs/data
/data/hdfs/tmp
然后将这些目录通过scp命令拷贝到Slave1和Slave2的相同目录下。
3.2 下载
我用的是 hadoop-2.7.3.tar.gz
链接:https://pan.baidu.com/s/1XesKilnkNVAxQHkecMmJcQ
提取码:meod
或者官网 https://hadoop.apache.org/releases.html
解压到workspace目录
tar -zxvf hadoop-2.7.3.tar.gz
3.3 配置环境变量
vi /etc/profile
请看开头第一张图
配好刷新资源 source /etc/profile
此时输入 hadoop 回车 会有资源加载 表示成功 如下图(目录别在意,懒得切换回去了)
3.4 Hadoop的配置
进入hadoop-2.7.3的配置目录:
cd ./hadoop2.7/etc/hadoop
依次修改core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml以及slaves文件。
3.4.1 修改core-site.xml
vi core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoopdir/dfs/data</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
3.4.2 修改vim hdfs-site.xml
vim hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoopdir/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoopdir/dfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
3.4.3 修改vim mapred-site.xml
复制template,生成xml,命令如下:
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.4.4 修改vim yarn-site.xml
vim yarn-site.xml
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
hadoop-env.sh与yarn-env.sh这两个文件不用修改,因为里面的配置是:
export JAVA_HOME=${JAVA_HOME}
真想改也可以改成对应的路径。
3.4.5 修改data/hadoop-2.7.3/etc/hadoop/slaves
将原来的localhost删除,切换到conf目录 改成如下内容
vi ./slaves
scp -r /opt/workspace/hadoopDir/hadoop2.7 root@slave1:/opt/workspace/hadoopDir/hadoop2.7
scp -r /opt/workspace/hadoopDir/hadoop2.7 root@slave2:/opt/workspace/hadoopDir/hadoop2.7
失败的话就把slave换成对应的ip
四、运行Hadoop
4.1 格式化NameNode
执行命令:
hadoop namenode -format
执行过程如下图:
4.2 启动NameNode
执行命令如下:我这是绝对路径 你可以在sbin目录 简单点
/opt/workspace/hadoopDir/hadoop2.7/sbin/hadoop-daemon.sh start namenode
4.3 启动DataNode
执行命令如下:
./sbin/hadoop-daemons.sh start datanode
说明Slave1和Slave2上的DataNode运行正常。
以上启动NameNode和DataNode的方式,可以用start-dfs.sh脚本替代:
./sbin/start-all.sh
成功的话
Master显示:
SecondaryNameNode
ResourceManager
NameNode
Slave显示
NodeManager
DataNode
常遇到的情况是slave的Datanode没有启动起来
进入sbin 输入命令 ./start-dfs.sh
slave的Nodemanager没有启动
进入sbin输入 ./start-yarn.sh
格式化 hdfs namenode -format
查看日志
/opt/workspace/hadoopDir/hadoop2.7/logs/yarn-root-nodemanager-slave2.log
每次使用完毕切记 关闭hadoop
stop-dfs.sh
下次时使用
sbin/start-dfs.sh
----------------------------------------------------------------------------------------------------------------------------------
五、测试hadoop
5.1 测试HDFS
最后测试下亲手搭建的Hadoop集群是否执行正常,测试的命令: ./sbin/start-dfs.sh
5.2 查看集群状态
./bin/hdfs dfsadmin -report
5.3 测试YARN
可以访问YARN的管理界面,验证YARN,如下图所示:
5.4 测试mapreduce
不想编写mapreduce代码。幸好Hadoop安装包里提供了现成的例子,在Hadoop的share/hadoop/mapreduce目录下。运行例子:
5.5 测试查看HDFS:
http://192.168.1.40:50070/ 即主机IP:50070