Ubuntu安装与调试hadoop3.0

安装调试了两个晚上,终于在虚拟机上把hadoop的环境搭建好了,中间遇到一些问题这里一并记录一下。

1. 文档

安装hadoop的首要任务当然是打开官网看文档中的安装指南。中文的资料也有,但是还是会因为版本和系统问题遇到一些坑,这里统一使用官网的推荐的各版本搭配使用,效果更佳。

官网文档地址 >>> Go!

2. 系统和软件依赖

2.1 环境和依赖如下:

系统:ubuntu 16.04
依赖:ssh、pdsh、jdk-8、hadoop-3.0.0

2.2 下载/安装/配置

别说了,升级一下你的apt后,开始大量下载和安装。

// 添加java远程镜像地址
$ sudo add-apt-repository ppa:webupd8team/java
// 升级安装工具
$ sudo apt-get update
$ sudo apt-get upgrade
// 安装ssh和pdsh
$ sudo apt-get install ssh
$ sudo apt-get install pdsh
// 安装java,安装器会提示你同意 oracle 的服务条款,选择 ok
$ sudo apt-get install oracle-java8-installer
配置java
$ sudo update-java-alternatives -s java-8-oracle
# 测试java是否安装成功
$ java -version
# java环境变量配置,进入profile文件,添加以下环境变量到文件末尾,然后激活
$ vi /etc/profile
$ source profile

下面的内容添加的profile

# set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/java-8-oracle  # 这里目录要换成自己的jvm里面java的目录
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH 
下载hadoop

hadoop镜像地址
点击链接(或者wget)下载指定版本:hadoop-3.0.0

$ wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.0.0/hadoop-3.0.0.tar.gz

解压tar文件

$ tar -zxvf hadoop-3.0.0.tar.gz

修改hadoop配置文件

$ cd hadoop-3.0.0.tar.gz/
$ vi etc/hadoop/hadoop-env.sh
# 添加JAVA_HOME环境变量到最后一行
export JAVA_HOME=/usr/lib/jvm/java-8-oracle

3. 测试hadoop

此时我们所在的一直是hadoop-3.0.0.tar.gz/目录
运行hadoop脚本,会显示可用的命令行命令

$ bin/hadoop

现在环境基本上配置齐全了!

3.1 单机器单进程操作

此操作用于调试,不适用分布式文件系统和调度系统操作数据。

$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jar grep input output 'dfs[a-z.]+'
$ cat output/*
3.2 伪分布式本地执行MapReduce任务

仅仅在本地运行MapReduce任务。
首先在以下文件的中添加配置内容。
$ vi etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.defaultFSname>
        <value>hdfs://localhost:9000value>
    property>
configuration>

$ vi etc/hadoop/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replicationname>
        <value>1value>
    property>
configuration>

尝试是否可以免密码登陆自己的主机:

$ ssh localhost

如果不行,就做如下操作

# 如果已经有了rsa_id就不需要指向下面这一句
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

免密配置和hadoop配置文件都设置好了,现在开始指向。

# 格式化文件系统
$ bin/hdfs namenode -format
# 开启`命名空间节点NameNode(主节点)`和`数据节点DataNode`的守护进程
$ sbin/start-dfs.sh

产生的log文件见logs文件夹。

此时可以访问NameNode节点web管理页面:NameNode - http://localhost:9870/
创建执行MapReduce任务所需的HDFS目录:

# 此时`/user`目录是分布式文件系统的根目录。
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/userMe

将测试用的文件复制到分布式文件系统(HDSF)中:

$ bin/hdfs dfs -mkdir /user/userMe/input
$ bin/hdfs dfs -put etc/hadoop/*.xml /user/userMe/input

以本地运行的方式执行一次最简单的mapreduce任务,接下来也会讲在单节点YARN分布式调度系统上运行,这里主要是需要注意两者的区别,就是现在没有使用分布式调度功能!

小黑板:YARN集群-负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager。如果数据量少在本地环境就可以跑,如果数据量多就需要在YARN调度集群上实现分布式的大数据处理。

运行hadoop提供的mapreduce任务测试用例,并获得输出日志:

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jar grep /user/userMe/input output 'dfs[a-z.]+'

查看输出日志:

$ bin/hdfs dfs -cat output/*

现在一次最简单的hadoop任务已经执行完毕了!我们可以关闭文件系统进程。

$ sbin/stop-dfs.sh
3.2 伪分布式在单节点YARN上执行MapReduce任务

我们先执行命令开启HDFS守护进程:

$ sbin/start-dfs.sh

小黑板:HDFS集群:负责海量数据的存储,集群中的角色主要有 NameNode / DataNode/SecondaryNameNode。

这里提到一个问题:注意
在启动进程时会报一个没有权限访问系统(start-dfs.sh提示rcmd: socket: Permission denied)的错误,在网上找到了解决方案,链接:start-dfs.sh -> rcmd: socket: Permission denied

然后需要修改一些跟YARN有关的配置文件
$ vi etc/hadoop/mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.namename>
        <value>yarnvalue>
    property>
configuration>

vi etc/hadoop/yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-servicesname>
        <value>mapreduce_shufflevalue>
    property>
    <property>
        <name>yarn.nodemanager.env-whitelistname>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOMEvalue>
    property>
configuration>

开启ResourceManagerNodeManager 守护进程:

$ sbin/start-yarn.sh

此时可以访问ResourceManager的web管理页面:http://localhost:8088/
然后运行一个MapReduce任务,上一节写的一样。

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jar grep input output 'dfs[a-z.]+'

关闭yarn守护进程

 $ sbin/stop-yarn.sh

这样,我们通过上面的步骤实现了单机的伪分布式文件系统的搭建,和在本地运行MapReduce任务与通过单节点的YARN调度来跑MapReduce任务。

更多文章可以访问我的个人博客:码练

你可能感兴趣的:(hadoop)