1、Hadoop简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
2、安装并配置
(1)Java 1.5.x。
java安装略。
查看java安装目录:
查看java配置文件:
vim /etc/profile
注:找不到jps命令编辑/root/.profile如下:
使得配置生效:
source /root/.profile
查看java是否安装成功:java -version
(2)保证 sshd一直运行
ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。
另:rsync是linux系统下的数据镜像备份工具。可以镜像保存整个目录树和文件系统。很容易做到爆出原理文件的权限、时间、软硬链接等。
sudo apt-get install ssh // 安装ssh
sudo apt-get install rsync // 安装rsync
sudo service ssh start // 开启SSH服务
ps -e | grep ssh // 查看SSH服务是否开启
$ ssh localhost #登陆SSH,第一次登陆输入yes
$ exit #退出登录的ssh localhost
$ cd ~/.ssh/ #如果没法进入该目录,执行一次ssh localhost
$ ssh-keygen -t rsa
输入完 $ ssh-keygen -t rsa 语句以后,需要连续敲击三次回车,之后再输入:
$ cat ./id_rsa.pub >> ./authorized_keys #加入授权
$ ssh localhost #此时就不需要密码
(3)Hadoop下载并解压
下载:http://hadoop.apache.org/releases.html
其中source download为源码下载,需要编译才可使用。Binary download为二进制下载,可直接解压安装。
解压:
tar -zxvf hadoop-3.1.3.tar.gz
解压后文件如下:
(4)配置
编辑~.bashrc,配置Hadoop如下:
export HADOOP_HOME=/home/wzh/Hadoop/hadoop-3.1.3/
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
其中HADOOP_HOME为Hadoop解压的路径。
检查是否安装成功:
3、启动
Hadoop支持以下三种模式集群:
- 单机模式
- 伪分布式模式
- 完全分布式模式
(1)单机模式
Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
例:
在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 a[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中:
cd /home/wzh/Hadoop/hadoop-3.1.3/ # 进到Hadoop安装的目录
mkdir input # 创建文件夹
cp etc/hadoop*.xml ./input # 将配置文件作为输入文件
./bin/hadoop jar /home/wzh/Hadoop/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'a[a-z.]+' # 统计符合正则表达式的
cat ./output/* # 查看运行结果
(2)伪分布模式
Hadoop也可以以伪分布模式的方式运行在单节点上, 这个时候每一个Hadoop守护进程都是一个单独的Java进程。这种模式需要进行相应的分布式设置, 但是又由于只有一个节点, 所以我们称之为伪分布模式。
由于Hadoop2.x增加了Yarn, 所以有两个选择: 可以把MapReduce程序直接运行在HDFS上, 也可以选择运行在Yarn上。
(a)配置Hadoop安装目录中的etc/hadoop/core-site.xml:
注:其中localhost要改成其他的,则要在/etc/hosts中的对应。
(b)配置Hadoop安装目录中的etc/hadoop/hdfs-site.xml:
注:
这里设置的副本的数量是指的将来在HDFS上存储的文件的副本。因为现在配置的是单节点伪分布模式, 所以把副本数量设置为 1。
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。
此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
(c)格式化文件系统
hdfs namenode -format
注:
格式化的动作只需要执行一次即可。以后再启动集群不需要重复执行这个动作。多次格式化会出现异常, 务必不要多次格式化。
(d)启动namenode和datanode的守护进程
问题(1):
Error:JAVA_HOME is not set and could not be found
sudo vim hadoop/etc/hadoop/hdoop-env.sh
将语句 export JAVA_HOME=$JAVA_HOME
修改为 export JAVA_HOME=/usr/java/jdk1.8.0_221 # 自己的java路径
问题(2):
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
在/etc/profile中,添加
export HADOOP_ROOT_LOGGER=DEBUG,console
最后记得使配置生效:
source /etc/profile
问题(3):
WARN hdfs.DFSUtilClient: Namenode for null remains unresolved for ID null. Check your hdfs-site.xml file to ensure namenodes are configured properly.
修改hadoop中etc/hadoop/core-site.xml中的地址,自定义的域名要和/etc/hosts中对应。
(e)用jps检查是否启动成功
(f)通过网页访问
如果出现这段英文,这说明你的配置包括进程启动都没问题,你只是访问了进程中的非web端口
NameNode界面:http://localhost:50070
(g)上次文件到hdfs
使用命令进行创建目录:
root@ubuntu:~/Hadoop/hadoop-2.9.2/bin# hdfs dfs -mkdir -p /usr/hadoopTest/input
上传文件:
hdfs dfs -put /home/wzh/Hadoop/test/input.txt /usr/hadoopTest/input
问题:
put: File /usr/hadoopTest/input/input.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
解决:
(i)查看防火墙状态:
防火墙是关闭状态,因此不是防火墙的问题。
(ii)查看磁盘使用情况:
从这里可以看出操盘的空间都是空的。原因可能是hadoop多次格式化的时候出现了问题。
(iii)重新格式化
sbin/ stop-all.sh #将hadoop关闭
rm -r /usr/local/hadoop #删除前面格式化创建的tmp文件夹
hdfs namenode -format #重新初始化hadoop
hdfs dfs -mkdir -p /usr/hadoopTest/input #重新创建文件夹
再次上传即成功:
Block Size :块的大小 存储上的上限值是128MB
Replication:副本数量(上述中在配置文件配置为1)
点击该文件可进行下载等操作。
使用命令进行查看:
(3)使用yarn运行MapReduce程序
YARN(Yet Another Resource Negotiator)是Hadoop2.0集群中负责资源管理和调度以及监控运行在它上面的各种应用,是hadoop2.0中的核心,它类似于一个分布式操作系统,通过它的api编写的应用可以跑在它上面,支持临时和常驻的应用,集群的资源可以得到最大限度的共享。资源是指CPU,内存,硬盘,带宽等可以量化的东西。
(a)配置yarn-env.sh
修改hadoop安装目录中/etc/hadoop/yarn-env.sh,将java环境配置如下:
(b)配置yarn-site.xml
配置hadoop安装中/etc/hadoop/yarn-site.sh:
配置完毕后,启动Resourcemanager和nodemanager,都是yarn上的,启动前必须保证NameNode和DataNode已经启动。
启动resourcemanager:
yarn-daemon.sh start resourcemanager
启动nodemanager:
yarn-daemon.sh start nodemanager
查看resourcemanager和nodemanager是否都成功开启:
注意这里6个服务缺一不可。
可以通过yarn的服务界面查看:http://localhost:8088.
从该界面可以看出当前执行的任务的状态,包括id、用户、任务名称等信息。
注:关闭hadoop:
sbin/stop-dfs.sh namenode
sbin/stop-dfs.sh datanode
sbin/ yarn-daemon.sh stop resourcemanager
sbin/ yarn-daemon.sh stop nademanager
参考:https://www.cnblogs.com/Mrchengs/p/11218728.html
(4)完全分布式模式
(a)主机配置
在Vmware中克隆一个新的虚拟机,其中一个命名为ubuntu1,另一个命名为ubuntu2。Hadoop集群中包括2个节点:1个Master,2个Salve,其中虚拟机ubuntu1既做Master,也做Slave;虚拟机Ubuntu2只做Slave。
配置hostname:Ubuntu下修改机器名称: sudo gedit /etc/hostname ,改为Ubuntu1;修改成功后用重启命令:hostname,查看当前主机名是否设置成功;
此时可以用虚拟机克隆的方式再复制一个。(先关机 vmware 菜单--虚拟机-管理--克隆)。
注意:修改克隆的主机名为Ubuntu2。
配置hosts文件:查看Ubuntu1和Ubuntu2的ip:ifconfig;
打开hosts文件:sudo gedit /etc/hosts,添加如下内容:
192.168.xxx.xxx Ubuntu1
192.168.xxx.xxx Ubuntu2
在Ubuntu1上执行命令:ping Ubuntu2,若能ping通,则说明执行正确。
(b)设置ssh无密验证配置
安装ssh可查看前面的配置。
无密码登录:
ssh localhost;
无密码登陆到Ubuntu2,在Ubuntu1上执行:ssh-copy-id Ubuntu2,查看Ubuntu2的/home/username/.ssh文件里是否有authorized_keys;
在Ubuntu1上执行命令:ssh Ubuntu2,首次登陆需要输入密码,再次登陆则无需密码;若要使Ubuntu2无密码登录Ubuntu1,则在Ubutu2上执行上述相同操作即可。
注:若无密码登录设置不成功,则很有可能是文件夹/文件权限问题,修改文件夹/文件权限即可。sudo chmod 777 “文件夹” 即可。
(c)配置hadoop文件
- 1)配置yarn-env.sh 文件-->>修改JAVA_HOME:
- 2)配置yarn-env.sh 文件-->>修改JAVA_HOME
添加如下内容:
- 3)配置slaves文件-->>增加slave节点:
删除原来的localhost,添加如下内容:
- 4)配置core-site.xml文件-->>增加hadoop核心配置:
- 5)配置 hdfs-site.xml文件-->>增加hdfs配置信息:
- 6)配置 mapred-site.xml.template文件-->>增加mapreduce配置:
(使用yarn框架、jobhistory使用地址以及web地址)
- 7)配置 yarn-site.xml文件-->>增加yarn功能:
- 8)将配置好的Ubuntu1中/hadoop/etc/hadoop文件夹复制到到Ubuntu2对应位置(删除Ubuntu2原来的文件夹/hadoop/etc/hadoop)
scp -r /home/wzh/Hadoop/hadoop-2.9.2/etc/hadoop wzh@Ubuntu2: /home/wzh/Hadoop/hadoop-2.9.2/etc/
(d)验证
注:以下命令均在hadoop的安装目录的/sbin中运行。
1)格式化namenode:
hdfs namenode -format
2)启动hdfs:
start-dfs.sh
启动hdfs出问题见上面所列,一般都是配置没配置好,或者初始化出问题,多次初始化的问题后可将初始化创建的文件夹删除后重新初始化。
3)启动yarn:
start-yarn.sh
jps查看已启动的集群:
4)查看:
浏览器中输入:http://hadoop004:50090/status.html