Hadoop3.x 环境搭建&&填坑
环境配置 && 安装JDK && 安装Hadoop
笔者自学大数据笔记
-
设置静态IP
vim /etc/sysconfig/network-scripts/ifcfg-eth0 NAME=eth0 DEVICE=eth0 BOOTPROTO=static ONBOOT=yes HWADDR=00:50:56:25:71:6a IPADDR=192.168.0.111 GATEWAY=192.168.0.1 DNS1=192.168.0.1 # 保存退出
-
修改主机名
vim /etc/sysconfig/network HOSTNAME=hadoop01
-
关闭防火墙
# 关闭防火墙 (开启:start,重启:restart,关闭:stop,状态:status,开启自启动:enable,关闭自启动:disable) systemctl stop firewalld # 重启防火墙这样也可以 firewall-cmd --reload # 关闭防火墙自启动 systemctl disable firewalld # 列出开放的所有端口 firewall-cmd --list-ports # 查询某个端口是否开放 eg:3306 响应:yes或no firewall-cmd --zone=public --query-port=3306/tcp # 添加防火墙端口后,要重启防火墙才生效 # 添加一个端口 eg:3306 持久开启(服务器重启,依然保持开启状态,不添加则属于临时添加端口): --permanent firewall-cmd --zone=public --add-port=3306/tcp --permanent # 添加一组连续的端口 eg:3306,3307,3308,3309 firewall-cmd --zone=public --add-port=3306-3309/tcp --permanent
-
创建dev用户
#创建用户 默认创建分组(名跟用户名一样)并将用户添加到该组中 useradd dev # 创建分组 eg:新建分组devgroup groupadd devgroup # 新建用户同时添加分组 eg:新建用户aaa并将其添加到已有的devgroup分组中 useradd -g devgroup aaa # 给已有用户添加分组 eg:将已存在用户dev添加到已存在分组devgroup中 usermod -G devgroup dev # 查询centos7目前有哪些用户 # cut -d : -f 1 /etc/passwd cat /etc/passwd # 查询目前用户分组情况 cat /etc/group
-
配置hadoop具有root权限
-
先用root账户修改 /etc/sudoers 文件权限为可编辑,默认只读 (-r–r-----)
-
修改文件 添加用户权限
-
改回 /etc/sudoers 文件权限为只读
#步骤1) chmod 777 /etc/sudoers #步骤 2) vim /etc/sudoers # 复制 [ root ALL=(ALL) ALL ] 这行添加在下面修改下用户名就可以 eg:dev用户添加具有root权限 ## Allow root to run any commands anywhere root ALL=(ALL) ALL dev ALL=(ALL) ALL # 保存退出 #步骤3) chmod 440 /etc/sudoers
-
-
/opt目录创建module software文件夹
mkdir /opt/software /opt/module
-
修改module software文件夹所有者为dev用户:dev分组
# -R 递归文件夹,修改文件,文件夹拥有者 chown -R dev:dev /opt/software /opt/module
-
安装JDK(上传压缩包,解压,配置环境变量,配置文件生效source一下),此处略过~~
-
安装hadoop(上传压缩包,解压,配置环境变量 bin目录 && sbin目录 ,配置文件生效source一下),此处略过~~
Hadoop运行模式之单机模式(官网Grep+WordCount案例)
官方Grep案例
-
在hadoop-3.3.0文件夹下面创建一个input文件夹
mkdir input
-
将hadoop的etc文件夹下xml配置文件复制到input 注意:output文件夹不能存在,否则报错文件已存在异常 FileAlreadyExistsException: Output directory file:/opt/module/hadoop-3.3.0/output already exists
cp /opt/module/hadoop-3.3.0/etc/hadoop/*.xml ../../input
-
执行share目录下的MapReduce程序
如果遇到执行程序找不到主类: 看你执行命令是否为
hadoop jar xxx
,以为hadoop xxx
就可以啦O~Oerror : [ 错误: 找不到或无法加载主类 share.hadoop.mapreduce.hadoop-mapreduce-examples-3.3.0.jar ]
hadoop jar /opt/module/hadoop-3.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar grep input output 'dfs[a-z.]+'
-
查看输出结果
cat output/part-r-00000 # 显示结果 1 dfsadmin
官方WordCount案例
-
在hadoop-3.3.0文件夹下面创建一个wcinput文件夹
mkdir wcinput
-
在 wcinput 文件下创建一个 wc.txt文件,并添加内容
# 创建文件命令 # touch wc.txt vim wc.txt # wc.txt文件内容 随意单词 eg:↓↓↓ hello word map reduce yarn hadoop hadoop dev dev test test test aaa cechsi namenode datanode resourcemanager who am i # 保存退出 :wq
-
回到hadoop-3.3.0文件夹下执行wordcount程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount wcinput/wc.txt output
-
查看结果
cat wcoutput/part-r-00000 # 显示结果 aaa 1 am 1 cechsi 1 datanode 1 dev 2 hadoop 2 hello 1 i 1 map 1 namenode 1 reduce 1 resourcemanager 1 test 3 who 1 word 1 yarn 1
Hadoop运行模式之伪分布式模式
1. 分析
1)配置集群
2)启动,测试集群增/删/改
3)执行WordCoung案例
2. 步骤
1)配置集群
-
配置hadoop文件夹下etc/hadoop/adoop-env.sh
# 查看 $JAVA_HOME echo $JAVA_HOME /opt/module/jdk1.8.0_221/bin # 修改etc/hadoop/adoop-env.sh中JAVA_HOME配置 export JAVA_HOME=/opt/module/jdk1.8.0_221/bin # 保存退出 :wq
-
配置core-site.xml
<!-- 指定HDFS 中 NameNode 的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:9000</value> </property> <!-- 指定Hadoop 运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.3.0/data/tmp</value> </property>
-
配置hfs-site.xml
<!-- 指定HDFS 副本的数量,默认副本数:3 --> <property> <name>dfs.replication</name> <value>1</value> </property>
2)启动集群(hadoop文件夹下)
-
格式化NameNode(第一次启动时格式化,以后就不要总格式化)
bin/hdfs namenode -format
-
启动NameNode
sbin/hadoop-daemon.sh start namenode
-
启动DataNode
sbin/hadoop-daemon.sh start datanode
3)查看集群
- 查看集群是否启动成功
jps
4755 DataNode
4835 Jps
4630 NameNode
- WEB端查看HDFS
# hadoop3.x 版本
http://hadoop01:9870
# hadoop2.x版本
http://hadoop01:50070
- 查看产生的log日志
问题
- 思考:为什么不能一直格式化 NameNode,格式化NameNode,要注意什么?
注意:格式化NameNode,会产生新的集群 id,导致 NameNode 和DataNode 的集群 id 不一致,集群找不到已往数据。所以,格式 NameNode 时,一定要先删除data 数据和 log 日志,然后再格式化 NameNode
# 查看namenode集群ID
cat data/tmp/dfs/name/current/VERSION
namespaceID=851295736
clusterID=CID-2c00d4b3-1b98-4914-9d80-853c104b65f1
# 查看datanode 集群ID(会发现和namenode中箪集群ID完全一样)
cat data/tmp/dfs/data/current/VERSION
clusterID=CID-2c00d4b3-1b98-4914-9d80-853c104b65f1
datanodeUuid=9fc063f9-dad5-4ac9-a7e9-512a35782361
4)操作集群
下面开始填坑
端口: 50070 ----> 9870
错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
主机执行hadoop classpath
,hadoop3.x版本需要配置hadoop classpath,然后重启yarn
vim yarn-site.xml 添加一个配置 hadoop classpath
<property>
<name>yarn.application.classpath</name> <value>/opt/module/hadoop-3.3.0/etc/hadoop:/opt/module/hadoop-3.3.0/share/hadoop/common/lib/*:/opt/module/hadoop-3.3.0/share/hadoop/common/*:/opt/module/hadoop-3.3.0/share/hadoop/hdfs:/opt/module/hadoop-3.3.0/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.3.0/share/hadoop/hdfs/*:/opt/module/hadoop-3.3.0/share/hadoop/mapreduce/*:/opt/module/hadoop-3.3.0/share/hadoop/yarn:/opt/module/hadoop-3.3.0/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.3.0/share/hadoop/yarn/*</value>
</property>
执行rsync 命令报错 ===> 需要同步的服务器都要安装这个命令(同步和被同步的机器)
bash: rsync: 未找到命令
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(226) [sender=3.1.2]
集群配置文件修改
集群配置 corsite.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop02:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.3.0/data/tmp</value>
</property>
修改hadoop-env.sh && yarn-env.sh && mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_221
vim hdfs.site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop04:50090</value>
</property>
yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>
mapred-site.xml
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
etc/hadoop/workers # 替换2.x版本的slaves
192.168.0.112
192.168.0.113
192.168.0.114
安装时间同步器
yum install ntpd
有点乱 嘻嘻