CentOS7搭建Hadoop分布式文件系统
配置:
1.CentOS-7-x86_64-DVD-2009
2.hadoop3.1.4
3.java1.8.0_65
步骤
1.网络配置
- 虚拟机选择桥接模式,在桥接模式下能联网
- 配置hosts和hostname
- 安装ssh,配置ssh免密登录各个节点
- 配置java环境
2.hadoop文件配置
- 配置hadoop-env.sh
- 配置core-site.xml
- 配置workers
- 配置hdfs-site.xml
- 配置mapred-site.xml
- 配置yarn-site.xml
3.hadoop一条龙
- hadoop格式化
- hadoop启动
- hadoop程序运行
**
1.网络配置
1.配置hosts和hostname
为每一个虚拟机配置hostname
我有3个虚拟机分别命名为
Master
Slaver1
Slaver2
gedit /etc/hostname
直接在里面写名字就可以了
配置hosts
每一个虚拟机都要配置
gedit /etc/hosts
ssh安装配置
1.ssh安装
2.ssh免密码登录
先在Master节点里运行ssh生成公钥,如果之前生成过了需要删除之前生成的公钥
cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa* # 删除之前生成的公匙(如果已经存在)
ssh-keygen -t rsa # 执行该命令后,遇到提示信息,一直按回车就可以
把公钥放到~/.ssh/authorized_keys
cat ./id_rsa.pub >> ./authorized_keys
ssh localhost测试能否无密码登录
通过scp命令发送文件到各个节点,有多少个发多少次
scp ~/.ssh/id_rsa.pub hadoop@Slaver1:/home/hadoop/
在Slaver1节点里把公钥放到authorized_keys
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在,则忽略本命令
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完以后就可以删掉
测试在Master节点连接Slaver1,到此如果Master能远程无密码连接到各个节点就完成了
ssh Slaver1
2.hadoop文件配置
hadoop安装
tar -zxvf (hadoop.tar.gz文件路径) -C /usr/local
chown -R hadoop /usr/local/(hadoop文件) #在整个搭建hadoop分布式的时候一定要注意给用户操作的权限,或者直接用root
配置好hadoop6个文件,过程是在Master节点配置好,然后压缩发送到各个节点再解压出来(配置文件都在 hadoop文件下的etc/hadoop)
workers
Master
Slaver1
Slaver2
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:8020</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/export/data/hadoop-3.1.4</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/export/data/hadoop-3.1.4</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Slaver1:9868</value> </property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name> <value>Master:10020</value>
</property>
<!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>Master:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value>
</property>
<!-- 是否将对容器实施物理内存限制 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 保存的时间7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name> <value>604800</value>
</property>
</configuration>
hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_65
#文件最后添加
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_SECONDARYNAMENODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop
3.hadoop一条龙
格式化hadoop
注意:hadoop格式化不再进行太多次,格式化太多次会导致hadoop主从混乱
解决办法:把格式化生成的所有文件删除
路径:查看core-site.xml里的dfs.namenode.name.dir参数
hdfs namenode -format
启动Hadoop
start-dfs.sh
start-yarn.sh
通过jps查看各项服务是否开启
节点 | 服务 |
---|---|
Master | NameNode 、DateNode 、RecourseManage 、NodeManage |
Slaver1 | SecondaryNameNode、 DateNode 、NodeManage |
Slaver2 | DateNode、 NodeManage |
例子
词频统计
思路:
1.在本地文件系统创建一个txt文件
2.把文件上传到分布式系统里
3.调用WordCount程序对txt文件进行统计
4.查询输出文件
wc.txt文件
hello world
hello hadoop
hadoop is the best
上传wc.txt文件到hadoop
hdfs dfs -mkdir -p /user/hadoop/wc #在hadoop创建路径/user/hadoop/wc
hdfs dfs -mkdir -p /user/hadoop/output #创建输出路径
hdfs dfs -put ./wc.txt /user/hadoop/wc #把文件上次到hadoop
调用hadoop程序
cd (hadoop安装目录)/shared/hadoop/mapreduce #进入到java程序目录
hadoop jar hadoop-mapreduce-examples-3.1.4.jar /user/hadoop/wc.txt /user/hadoop/output #调用函数
查看结果