安装配置hadoop集群-完全分布模式
一、配置基础环境(主机名、名字解析、ssh免密码登录、jdk环境)
- 克隆3台虚拟机,设置IP地址和主机名,使得3台虚拟机以及主机互通
a) 编辑/etc/sysconfig/network-scripts/ifcfg-ens32文件,修改IP地址
master:192.168.119.200
slave1:192.168.119.201
slave2:192.168.119.202
b) 编辑/etc/hostname文件,修改主机名
vi /etc/hostname
把三个虚拟机的名字改成master slave1 slave2
重启虚拟机后就可以看到名字改了
c) 编辑/etc/hosts文件,配置名字解析
vi /etc/hosts
三台虚拟机上都这样改
d) 检查3台虚拟机能够使用名字ping通
2. 配置ssh免密码登录,使得3台虚拟机可以免密码互相登录
a) 在每台虚拟机上安装openssh-clients,并使用#ssh-keygen -t rsa生成密钥对
yum install openssh-clients
安装完成后cd .ssh
b) 把三台虚拟机的公钥集中到一个authorized_keys文件中,并发送到所有虚拟机
在.ssh目录下,查看三台虚拟机的公钥:cat id_rsa.pub,复制三个公钥到authorized_keys文件(authorized_keys文件是在master新建的 vi authorized_keys)
把authorized_keys文件发送到slave1 slave2上
scp authorized_keys root@slave1:/root/.ssh
scp authorized_keys root@slave2:/root/.ssh
c) 在master上使用ssh免密码登录slave1和slave2
3. 安装jdk,配置环境变量
a) 下载jdk,解压到/usr/local/jdk1.8(到官网下载https://www.oracle.com/index.html)
b) 编辑/etc/profile文件,设置环境变量
vi /etc/profile,把下面的代码复制到这个文件夹
export JAVA_HOME=/usr/local/jdk1.8
CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
c) 使用#source /etc/profile命令执行脚本
source /etc/profile
d) 使用# java -version 检查java环境
java -version
二、安装hadoop集群
-
在master上安装hadoop
a) 建立hadoop工作目录/var/hadoop
./hadoop/tmp
./hadoop/var
./hadoop/dfs/name
./hadoop/dfs/data
b) 下载hadoop软件并上传到master虚拟机,并解压到/usr/local/hadoop2.7(下载地址http://hadoop.apache.org/)
c) 编辑/usr/local/hadoop2.7/etc/hadoop下的配置文件
i. hadoop-env.shii. yarn-env.sh
iii. mapred-env.sh
iv. core-site.xml
把以下段代码复制到里边,放到文件的最后就行
<configuration>
<property><!--hadoop临时文件的存放目录-->
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/tmp</value>
</property>
<property><!--NameNode 的URI默认端口为8020-->
<name>fs.default.name</name>
<value>hdfs://master</value>
</property>
</configuration>
v. hdfs-site.xml
把以下段代码复制到里边,放到文件的最后就行
<configuration>
<property><!--namenode持久存储名字空间及事务日志的本地文件系统路径-->
<name>dfs.name.dir</name>
<value>/var/hadoop/dfs/name</value>
</property>
<property><!--DataNode存放块数据的本地文件系统路径-->
<name>dfs.data.dir</name>
<value>/var/hadoop/dfs/data</value>
</property>
<property><!--数据需要备份的数量,不能大于集群的机器数量,默认为3-->
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
vi. yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property><!--NodeManager上运行的附属服务,用于运行mapreduce-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property> <!--ResourceManager 对客户端暴露的地址-->
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property><!--ResourceManager 对ApplicationMaster暴露的地址-->
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property><!--ResourceManager 对NodeManager暴露的地址-->
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property><!--ResourceManager 对管理员暴露的地址-->
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property><!--ResourceManager 对外web暴露的地址,可在浏览器查看-->
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
vii. mapred-site.xml (这个文件是拷贝 mapred-site.xml.template得到的)
cp mapred-site.xml.template mapred-site.xml
把以下代码复制到这里
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
viii. slaves
slave1
slave2
- 在其它虚拟机安装hadoop
a) 从master拷贝jdk到slave1和slave2
b) 从master拷贝/etc/profile到slave1和slave2并执行脚本
检查环境变量
source /etc/profile
java -version
c) 从master拷贝工作目录到slave1和slave2
d) 从master拷贝hadoop到slave1和slave2
scp -r /usr/local/hadoop2.7/ root@slave1:/usr/local/hadoop2.7
scp -r /usr/local/hadoop2.7/ root@slave2:/usr/local/hadoop2.7
- 在master上执行hdfs初始化(hadoop2.7的bin目录下)
./hadoop namenode -format
不报错的话,执行成功
格式化成功后,可以在看到在/var/hadoop/dfs/name/目录多了一个current目录
三、启动、停止hadoop集群
- 使用脚本启动hadoop集群
在/usr/local/hadoop2.7/sbin目录下 ./start-all.sh - 在master和slave1上使用jps命令检查hadoop集群是否启动
- 在主机使用浏览器访问master的相关端口
50070:hdfs文件管理
在浏览器输入192.168.119.200:50070
8088:ResourceManager
8042:NodeManager(在slave上)
- 在master停止hadoop集群
./stop-all.sh
四、使用hadoop集群运行wordcount
- 设置hadoop命令路径(在集群各个节点/etc/profile)
# export PATH=$PATH:/usr/local/hadoop2.7/bin
2. 使用hdfs命令上传文件到HDFS系统
a) # hdfs dfs -ls / 查看hdfs根目录
b) # hdfs dfs -mkdir /input 在根目录建立input目录
c) # hdfs dfs -put /etc/httpd/conf/httpd.conf /input 上传文件到input
3. 运行wordcount程序
在/usr/local/hadoop2.7/share/hadoop/mapreduce目录下执行
#hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /input/httpd.passwd /out
4. 查看wordcount程序输出结果
#hdfs dfs -cat /out/part-r-00000