研究一下hadoop,所以在这里记录一下hadoop的学习过程。
今天先来尝试安装hadoop,hadoop软件一般都用于安装在linux系统下,似乎有说可以在windows下运行的,但毕竟还是在linux下运行效果比较好,所以这里只考虑在linux下运行安装的过程。
我下载安装的都是最新的版本,hadoop-3.0.0.tar.gz和jdk-9.0.4_linux-x64_bin.tar.gz。需要安装虚拟机,我们将这两个文件cp到centos虚拟机上去,进行解压配置。
我的个人目录为/home/xxx,所以将这两个压缩包文件放到这个目录下,创建一个app文件夹,将文件压缩到app文件夹下,
tar -zxvf hadoop-3.0.0.tar.gz /home/xxx/app
tar -zxvf jdk-9.0.4_linux-x64_bin.tar.gz /home/xxx/app
接下来我们配置jdk的环境变量,这里我提一下,因为hadoop是用java写的,所以它需要jre的环境。
执行:vi /ect/profile 注意权限问题
在最上面添加
export JAVA_HOME=/home/xxx/app/jdk-9.0.4
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/bin:$JRE_HOME/bin
export PATH=$PATH:${JAVA_HOME}/bin
保存退出后
执行:source /etc/profile
然后查询我们的java版本, java -version
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
就此证明jdk安装成功
下面我们来配置hadoop
我们来到hadoop配置文件的路径/home/xxx/app/hadoop-3.0.0/etc/hadoop
主要我们需要修改的配置文件为:hadoop-env.sh
我们找到:export JAVA_HOME=
我下载的hadoop文件里面就是这样的,可能你们下载的不一样,将其修改为:export JAVA_HOME=$JAVA_HOME
有人说这里如果直接写变量是不管用的,是hadoop的bug,但我这里是好用的,可能是最新版本进行各更新。修改之后我们进行保存退出即可
我们来到/home/xxx/app/hadoop-3.0.0/bin
执行./hadoop fs这时系统就会提示该命令的相关参数,如果不配置上面的JAVA_HOME就会提示没有找到JAVA_HOME路径
现在还不算完,我们还需要进行其他的配置,我们重新返回配置路径 ,开始配置core-site.xml
1 <configuration> 2 <property> 3 <!--声明hadoop默认的文件系统使用的是哪种--> 4 <name>fs.defaultFS</name> 5 <!--URI namenode地址--> 6 <value>hdfs://centos-1:9000/</value> 7 </property> 8 <property> 9 <!--hadoop工作目录--> 10 <name>hadoop.tmp.dir</name> 11 <value>/home/ljs/app/hadoop-3.0.0/tmp</value> 12 </property> 13 </configuration>
下面我们来配置hdfs-site.xml
1 <configuration> 2 <property> 3 <!--修改hdfs文件备份分数,默认为3,但暂时我们只有一台机器,所以需要更改为1--> 4 <name>dfs.replication</name> 5 <value>1</value> 6 </property> 7 </configuration>
配置mapred-site.xml
1 <configuration> 2 <property> 3 <!--mapreduce程序要运行在哪个资源框架上--> 4 <name>mapreduce.framework.name</name> 5 <!--yarn来负责调度资源--> 6 <value>yarn</value> 7 </property> 8 </configuration>
配置yarn-site.xml
1 <configuration> 2 <property> 3 <name>yarn.resourcemanager.hostname</name> 4 <value>centos-1</value> 5 </property> 6 <!-- Site specific YARN configuration properties --> 7 <property> 8 <name>yarn.nodemanager.aux-services</name> 9 <value> mapreduce_shuffle</value> 10 </property> 11 12 </configuration>
到此hadoop基本的配置就完成了
下面我们来格式化文件系统
hadoop namenode -format执行后会有Storage directory /home/xxx/app/hadoop-3.0.0/tmp/dfs/name has been successfully formatted
成功提示,注意上面配置文件中的centos都是本机域名映射,可自行替换为localhost或者127.0.0.1。这个配置似乎是有bug的,我上面明明写的是centos-1,但执行格式化会提示找不到centos1的服务器,我又将centos1域名映射添加到了hosts文件中去,接下来执行格式化成功
下面看看hadoop的tmp文件夹下是不是有内容了
下面我们启动start-dfs.sh和start-yarn.sh见证奇迹的时刻到了。看是否启动成功
不幸的是报了各种错误,不知道其他人,但我这里是报了错误
错误1
Starting namenodes on [localhost]
ERROR: Attempting to launch hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting launch.
这个问题我也是在网上查到的解决方案
解决1:
是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本
$ vim sbin/start-dfs.sh
$ vim sbin/stop-dfs.sh
在顶部空白处添加内容:
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
错误2
Starting resourcemanager
ERROR: Attempting to launch yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting launch.
Starting nodemanagers
ERROR: Attempting to launch yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting launch.
解决2:
是因为缺少用户定义造成的,所以分别编辑开始和关闭脚本
$ vim sbin/start-yarn.sh
$ vim sbin/stop-yarn.sh
在顶部空白处添加内容:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
保存后我们来重新启动
会提示一个警告说是HADOOP_SECURE_DN_USER替换了HDFS_SECURE_DN_USER,于是我将上面的参数名改成了这个,没有继续警告了。
我这里也没有那么顺利,会报各种权限和验证问题,是因为我个人操作问题,正常情况下不会有的.但启动没有报错并不证明启动成功,我启动的时候就没有报任何错误,但访问hdfs系统仍然不行,这时我们需要确定hadoop的各种进程是否成功启动
执行jps命令可以看到以下进程:
12704 NameNode
13013 SecondaryNameNode
13401 NodeManager
12812 DataNode
13293 ResourceManager
13710 Jps
进程不能少,否则证明个别服务启动失败,我当时namenode就没有,重新进行了格式化,然后再启动就成功了
下面也是我遇到的一个警告,但不影响使用
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
解决方案
第二个办法直接在log4j日志中去除告警信息。在/home/xxx/app/hadoop-3.0.0/etc/hadoop/log4j.properties文件中添加
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
下面我们来试一试上传文件吧
执行命令hadoop fs -put /home/xxx/software/jdk-9.0.4_linux-x64_bin.tar.gz hdfs://centos-1:9000/
稍等一会,就上传完毕了,我们在看一下hdfs系统目录执行:hadoop fs -ls hdfs://centos-1:9000/
Found 1 items
-rw-r--r-- 1 xxx supergroup 354635831 2018-02-03 21:37 hdfs://centos-1:9000/jdk-9.0.4_linux-x64_bin.tar.gz
就此hadoop的环境搭建及测试通过,可以睡觉去了