目的
搭建一个单节点的服务,为了快速的体验hadoop hdfs和hadoop MapReduce
前提条件
支持的平台:linux,windows,这里以centos7 64位操作
需要软件:java,这里已经解压到 /usr/local/java/jdk1.8.0_231
ssh 一般系统都自带
静态ip,给大家看下我的网络配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=800066b1-aea2-40f9-8c20-3c3dba0ff183
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.3.101
PREFIX=24
GATEWAY=192.168.3.1
DNS1=192.168.3.1
PEERDNS=no
设置域名
vim /etc/hosts
192.168.3.101 foo-1.example.com foo-1.example.com. foo-1 【注意中间末尾的点】
vim /etc/sysconfig/network
HOSTNAME=foo-1.example.com
准备hadoop环境
这里已经下载完成,并解压到下面目录
/usr/local/hadoop/hadoop-3.1.3
修改配置文件
vim /usr/local/hadoop/hadoop-3.1.3/etc/hadoop/hadoop-env.sh
##增加一行内容
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
查看hadoop命令使用
[root@localhost ~]# cd /usr/local/hadoop/hadoop-3.1.3
[root@localhost hadoop-3.1.3]# bin/hadoop
sage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
or hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
。。。
单机操作
默认,hadoop就是配置的单机模式,启动单一的java进程,用于调试很方便,
下面的示例复制解压缩的conf目录以用作input,然后查找并显示给定正则表达式的每个匹配项。 输出到给定的output目录。
[root@localhost hadoop-3.1.3]# cd /usr/local/hadoop/hadoop-3.1.3
[root@localhost hadoop-3.1.3]# mkdir input
[root@localhost hadoop-3.1.3]# cp etc/hadoop/*.xml input
[root@localhost hadoop-3.1.3]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
[root@localhost hadoop-3.1.3]# cat output/*
1 dfsadmin
伪分布式操作
伪分布式也是在单机环境操作,hadoop的每个后台程序运行在各自的java进程
配置
hdfs的连接url
[root@localhost hadoop-3.1.3]# cd /usr/local/hadoop/hadoop-3.1.3
[root@localhost hadoop-3.1.3]# vim etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://foo-1.example.com:9000</value> 【一定不要写localhost】
</property>
</configuration>
hdfs的副本个数,单机版,只能是1
[root@localhost hadoop-3.1.3]# vim etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
设置ssh免密登录
[root@localhost hadoop-3.1.3]# ssh-keygen -t rsa 【自动生成公私密钥对,按提示一路回车就行】
[root@localhost hadoop-3.1.3]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 【把公钥写到授权文件】
[root@localhost hadoop-3.1.3]# ssh foo-1.example.com【第一次录入密码,以后不用了】
###最终的效果如下
[root@foo-1 hadoop-3.1.3]# ssh foo-1.example.com
Last login: Thu Jan 2 16:15:41 2020 from 192.168.3.101
[root@foo-1 ~]# exit
登出
Connection to foo-1.example.com closed.
[root@foo-1 hadoop-3.1.3]#
运行
下面演示本地执行MapReduce任务
1.格式化文件系统
如果之前在hdfs上有数据,会提示是否清空,最好先执行 rm -rf /tmp/hadoop*
[root@localhost hadoop-3.1.3]# bin/hdfs namenode -format
WARNING: /usr/local/hadoop/hadoop-3.1.3/logs does not exist. Creating.
2020-01-02 16:17:04,278 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = foo-1.example.com/192.168.3.101
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 3.1.3
2.启动NameNode和DataNode后台进程
###需要先指定一下root用户,其他用户不需要
[root@localhost hadoop-3.1.3]# vim sbin/start-dfs.sh
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
### 启动
[root@localhost hadoop-3.1.3]# sbin/start-dfs.sh
Starting namenodes on [foo-1.example.com]
3.通过浏览器观察NameNode和DataNode
访问之前先关闭防火墙
[root@localhost bin]# systemctl stop firewalld
[root@localhost bin]# systemctl disabled firewalld
4.在hdfs上创建目录,用于执行MapReduce任务
[root@localhost hadoop-3.1.3]# bin/hdfs dfs -mkdir -p /user/root/input
我是root用户,其他用户可以/user/xxxx/input ,用户是放在user目录下的
5.本地文件上传到hdfs
[root@localhost hadoop-3.1.3]# bin/hdfs dfs -put etc/hadoop/*.xml input
文件默认是上传到用户目录下了,/user/root/input
6.运行示例
是在hdfs上执行的,output也是在hdfs的用户目录下
[root@localhost hadoop-3.1.3]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
7.检查运行结果
可以把文件从hdfs上复制出来
[root@localhost hadoop-3.1.3]# bin/hdfs dfs -get output output
[root@localhost hadoop-3.1.3]# cat output/*
1 dfsadmin
1 dfs.replication
也可以直接在hdfs上查看
[root@localhost hadoop-3.1.3]# bin/hdfs dfs -cat output/*
2020-01-02 20:14:40,495 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
1 dfsadmin
1 dfs.replication
8.结束后台进程
###需要先指定一下root用户,其他用户不用
[root@localhost hadoop-3.1.3]# vim sbin/stop-dfs.sh
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
[root@localhost hadoop-3.1.3]# sbin/stop-dfs.sh
Stopping namenodes on [localhost]
单机版使用yarn
伪分布式运行yarn,在单机增加ResourceManager和NodeManager守护进程
1.修改配置文件
[root@localhost hadoop-3.1.3]# vim etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
[root@localhost hadoop-3.1.3]# vim etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,</value>
</property>
</configuration>
2.启动ResourceManager和NodeManager守护进程
##如果是root用户,仍然需要先配置一下
[root@localhost hadoop-3.1.3]# vim sbin/start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
## 启动 ,保证NameNode和DataNode先启动了
[root@localhost hadoop-3.1.3]# sbin/start-dfs.sh
[root@localhost hadoop-3.1.3]# sbin/start-yarn.sh
3.浏览器访问web界面
resourceManager统计 http://192.168.3.101:8088/
4.执行MapReduce任务
注意输出的output2 是为了避免冲突,
[root@localhost hadoop-3.1.3]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output2 'dfs[a-z.]+'
5.结束进程
##结束之前先配置root用户
[root@localhost hadoop-3.1.3]# vim sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
## 结束
[root@localhost hadoop-3.1.3]# sbin/stop-yarn.sh
[root@localhost hadoop-3.1.3]# sbin/stop-dfs.sh
总结
### 后台进程操作,启动,关闭节点
sbin/start-dfs.sh
sbin/start-yarn.sh
sbin/stop-dfs.sh
sbin/stop-yarn.sh
### hdfs文件操作,格式化,上传下载
bin/hdfs namenode -format
bin/hdfs dfs
### 执行任务 jar文件
bin/hadoop jar