Ubuntu 16.10 搭建 hadoop 2.7.3 完全集群
最近在学习hadoop,在搭建完全分布式环境中的过程以及遇到的问题做一下记录。网上也有很多关于如何搭建hadoop的博客,不过大部分都是复制,粘贴。
关于如何创建虚拟机,这里我不做介绍,网上有很多这方面的介绍。当然,如果你又条件,可以自己买服务器或者多台电脑玩。还有在安装之前要先安装jdk,以及设置jdk环境变量。
创建hadoop用户组
groupadd hadoop
- 添加hadoop用户
useradd -g hadoop -s /bin/bash -m hadoop
备注:-g 属于刚刚创建的 hadoop 组
-s 是登录shell
-m 为hadoop在/home 下自动创建用户文件夹 hadoop
- 安装shh
apt-get install ssh
apt-get install rsync
apt-get install openssh-server
备注 : 对于ssh的详细安装,这里不做详解,请参看其他文章
配置 主机(hadoop01) 节点可通过 SSH 无密码访问 从节点(hadoop02 , hadoop03)
- 生成私钥,公钥
ssh-keygen -t rsa
ssh-keygen -t rsa -P '' //表示空密码
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys //追加到authorized_keys
chmod 600 authorized_keys //修改authorized_keys的权限,(这一步很重要不然的话,SSH时仍然需要密码)
- 将生成的 authorized_keys 文件复制到 hadoop02 和 hadoop03 的 .ssh目录下
scp ~/.ssh/authorized_keys hadoop@hadoop02:~/.ssh
scp ~/.ssh/authorized_keys hadoop@hadoop02:~/.ssh
- 安装hadoop
1、 从hadoop下载对应的tar.gz文件进行安装,这里选择的是2.7.3
2、 解压文件
tar -zxvf hadoop-2.7.3.tar.gz
- 配置 hadoop 的环境变量
vim /etc/profile
# set hadoop path
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.1
export PATH=$PATH:$HADOOP_HOME/bin
source /etc/profile
配置hadoop-env.sh,yarn-env.sh(export JAVA_HOME=/usr/java/jdk1.8.0_131),看到hadoop 2.7.3 中 hadoop-env.sh,yarn-env.sh 中默认使用的是 $JAVA_HOME , 但此处必须配置,不然启动的时候namenode和datanode会报找不到java_home 的错误
core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
- hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
</configuration>
看到其他文章有用到dfs.namenode.name.dir等配置,这里我没有配置,用hadoop默认的就好,默认位置:
默认file://${hadoop.tmp.dir}/dfs/name
- mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
看到其他文章有用到mapreduce.jobhistory.address等配置,这里我用默认的
- yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
</configuration>
这里很多文章都是配置了一大串的 host:port,值需要配置 yarn.resourcemanager.hostname 就好,其他都会以这个作为host
- 格式化节点 之前需要执行以下操作,不然执行wordcount程序会出现卡掉错误(以下ip是我局域网的ip,各自根据自己的ip进行修改)
vi /etc/hosts
192.168.234.128 hadoop01
192.168.234.129 hadoop02
192.168.234.130 hadoop03
这里需要注意,去掉/etc/hosts 中127.0.0.1 等多余的配置
- 修改hostname,各个机器上都需要修改,分别在各台机器上执行如下语句:
hostname hadoop01
hostname hadoop02
hostname hadoop03
- 好了,现在可以开始格式化节点了,在hadoop01上执行如下语句
bin/hdfs namenode -format
看到“successfully formatted”字样,表示,格式化成功。
- 启动hadoop,在hadoop安装目录(比如我是/usr/local/hadoop),执行如下命令
sbin/start-all.sh
在hadoop01,上用jps查看,namenode,ResourceManager是否启动
在hadoop02,03上用jps查看,datanode,NodeManager是否启动
浏览器查看 HDFS:http://192.168.234.128:50070
- 浏览器查看 mapreduce:http://192.168.234.128:8088
- 在hdfs的根目录下建立了一个test目录
hdfs dfs -mkdir /test
- 创建一个words.txt 文件
vi words.txt
Hello Alfred
Hello World
Hello Tom
Hello Jack
Hello Hadoop
Bye hadoop
- 将words.txt上传到hdfs的根目录
hadoop fs -put words.txt /
- 运行一个WordCount程序
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /words.txt /test/out
- 运行成功, 查看运行结果(一步步执行下面语句看是否有运行成功文件)
hdfs dfs -ls /
hdfs dfs -ls /test
hdfs dfs -ls /test/out
hdfs dfs -cat /test/out/part-r-00000 //这里part-r-0000改为你自己的文件名