Hadoop伪分布安装配置
安装环境:
- 系统:Ubuntu 14.10 64bit
- hadoop:2.5.1
- jdk:1.8.0_11
安装步骤:
一.安装JDK
安装 jdk,并且配置环境以及设置成默认
- sudo gedit /etc/profile
- 添加
- export JAVA_HOME=/opt/javaexport JRE_HOME=/opt/java/jreexport CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/libexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
- source /etc/profile (让刚刚的配置生效)
检查jdk是否正确安装和配置
在主目录下执行java -version
如果出现下面类似结果则ok
- hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ java -version
- java version "1.8.0_11"
- Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
- Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
记得系统中java_home也要设置好
二.安装hadoop
1.下载:
http://mirror.bit.edu.cn/apache/hadoop/common/
选择你要的版本。我选择的是最新的 2.5.1
hadoop是32位的如果是64位系统最好使用源码安装
不然就重新编译64位库(不编译有warning) 或者装上ubuntu的32位支持库。
2.安装
ubuntu下解压然后改名为hadoop方便敲命令
再移动到 /opt/下 用sudo mv
现在hadoop的目录即 /opt/hadoop
以后的命令我都是按这个位置来。
三.安装ssh server
这个是ssh的服务
sudo apt-get install openssh-server
四.添加hadoop用户
为了方便hadoop的管理,最好添加一个单独的用户来管理hadoop,例如添加hadoop用户
执行以下命令
sudo adduser hadoop
然后会提示输入密码,设置好密码就可以了
这时候只要执行
su hadoop
输入密码后就可以切换到hadoop用户下
注:
为了使hadoop帐号下能够sudo,在 /etc/sudousers 里
sudo ALL=(ALL:ALL) ALL的后面添加
hadoop ALL=(ALL:ALL) ALL
五.配置本机ssh无密码登录
hadoop@hanson-ThinkPad-Edge:~$ ssh-keygen -t rsa
ssh-keygen -t rsa命令会在当前目录下产生一个隐藏.ssh文件夹,以参数 rsa (或者 dsa) 方式在里面产生公钥和密钥,名称为 id_rsa.pub 和id_rsa ,可以把公钥给别的计算机来无密码登录你电脑,相当于通行证。
hadoop@hanson-ThinkPad-Edge:~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
authorized_keys便是存放别人的公钥的地方。
测试:
hadoop@hanson-ThinkPad-Edge:~$ ssh localhost
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64)
* Documentation: https://help.ubuntu.com/
Last login: Wed Aug 13 11:25:32 2014 from localhost
六.配置Hadoop
chmod -R 777 /opt/hadoop
改变hadoop的权限,使所有人可读可写。
su hadoop
切换到hadoop用户
1. 配置jdk及hadoop环境变量
在~/.bashrc文件里追加(只有当前用户可以使用的配置,切记切换到hadoop)
下面所有因安装而异的配置在我会用粗体标注。
export JAVA_HOME=/opt/java
export JRE_HOME=${JAVA_HOME}/jre
export HADOOP_HOME=/opt/hadoop
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$HADOOP_HOME/bin:$PATH
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
2. Hadoop文件配置
hadoop@hanson-ThinkPad-Edge:~$ cd /opt/hadoop/etc/hadoop/
hadoop@hanson-ThinkPad-Edge:/opt/hadoop/etc/hadoop$ vi yarn-env.sh
追加以下配置 (下面所有因安装而异的配置在我会用粗体标注。)
export HADOOP_FREFIX=/opt/hadoop
export HADOOP_COMMON_HOME=${HADOOP_FREFIX}
export HADOOP_HDFS_HOME=${HADOOP_FREFIX}
export PATH=$PATH:$HADOOP_FREFIX/bin
export PATH=$PATH:$HADOOP_FREFIX/sbin
export HADOOP_MAPRED_HOME=${HADOOP_FREFIX}
export YARN_HOME=${HADOOP_FREFIX}
export HADOOP_CONF_HOME=${HADOOP_FREFIX}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_FREFIX}/etc/hadoop
下面在 /opt/hadoop/etc/hadoop/ 目录下进行一系列配置(这些文件的模板都在template里面,学到深入的时候再分享。我后面遇到的问题也与此有关。)
vi core-site.xml
- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://localhost:9000</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/opt/hadoop/hadoop-root</value>
- </property>
- </configuration>
注意下面配置中的地址,也与安装路径有关。
vi hdfs-site.xml
- <configuration>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>file:/opt/hadoop/data/dfs/name</value>
- <final>true</final>
- </property>
- <property>
- <name>dfs.namenode.data.dir</name>
- <value>file:/opt/hadoop/data/dfs/data</value>
- <final>true</final>
- </property>
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- </configuration>
vi mapred-site.xml 这个是新文件
- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- <property>
- <name>mapreduce.system.dir</name> <!--系统目录-->
- <value>file:/opt/hadoop/data/mapred/system</value>
- </property>
- <property>
- <name>mapreduce.local.dir</name><!--本地目录--><value>file:/opt/hadoop/data/mapred/local</value>
- <final>true</final>
- </property>
- </configuration>
vi yarn-site.xml
- <configuration>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- </configuration>
配置完成.
七.启动并运行wordcount程序
1. 格式化namenode. 进入 /opt/hadoop/
键入 bin/hadoop namenode -format
切记若多次格式化,请先清空hdfs-site.xml中dfs.namenode.*.dir设置的文件路径里的文件。不然会冲突。不要把文件夹删了。
2. 启动
于/opt/hadoop/sbin
$ ./start-dfs.sh
$../start-yarn.sh
4.检查启动是否成功
hadoop@hanson-ThinkPad-Edge:/opt/hadoop/sbin$ jps
5036 DataNode
5246 SecondaryNameNode
5543 NodeManager
5369 ResourceManager
4852 NameNode
5816 Jps
全部存在就成功了。
5.试着运行wordcount
1)构造输入数据
新建一个文本文件
比如在 ~ 目录下的test.txt中输入一系列字母
hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ cat ~/test.txt
a c b a b d f f e b a c c d g i s a b c d e a b f g e i k m m n a b d g h i j a k j e
记得打空格。这个示例是用来统计单词数量的,不打空格它就只统计一个了。
2)上传到hdfs
hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ hadoop fs -mkdir /test (在hdfs中创建一个新文件夹)
hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ hadoop fs -copyFromLocal ~/test.txt /test (这个指令就是从本地复制到hdfs中)
hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ hadoop fs -ls /test (查看test中的文件)
Found 1 items
-rw-r--r-- 1 hadoop supergroup 86 2013-04-18 07:47 /test/test.txt
3)执行程序
注意版本号。
hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-0.23.11.jar wordcount /test/test.txt /test/out
#其中/test/out 为输出目录
4)查看结果
hadoop@hanson-ThinkPad-Edge:/opt/hadoop$ hadoop fs -ls /test
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2014-08-13 11:42 /test/out
-rw-r--r-- 1 hadoop supergroup 86 2014-08-13 13:50 /test/test.txt
hadoop@ubuntu:/opt/hadoop$ hadoop fs -ls /test/out
Found 2 items
-rw-r--r-- 1 hadoop supergroup 0 2014-08-13 13:53 /test/out/_SUCCESS
-rw-r--r-- 1 hadoop supergroup 76 2014-08-13 13:53 /test/out/part-r-00000
hadoop@ubuntu:/opt/hadoop$ hadoop fs -cat /test/out/part-r-00000
14/08/13 13:55:24 INFO util.NativeCodeLoader: Loaded the native-hadoop library
a 7
b 6
c 4
d 4
e 4
f 3
g 3
h 1
i 3
j 2
k 2
m 2
n 1
s 1
最后记得
$ ./stop-dfs.sh
$ ./stop-yarn.sh
--------------------
下面说一下我所遇到的问题!
1.第一个错误是碰到说找不到加载类namenode
解决过程: 经过查找发现是xml配置文件写错了 多了一个符号 删去后好了
2.第二个碰到的问题就是datanode始终无法启动
解决过程:经过查找logs目录下的datanode启动的记录
以下提示信息显示了NameNode和DataNode的namespaceID不一致。
java.io.IOException: Incompatible namespaceIDs in /root/tmp/dfs/data:
NameNode namespaceID = 1307672299; DataNode namespaceID = 389959598
这个问题一般是由于两次或两次以上的格式化NameNode造成的,有两种方法可以解决,第一种方法是删除DataNode的所有资料(及将集群中每个 datanode的/hdfs/data/current中的VERSION删掉,然后执行hadoop namenode -format重启集群,错误消失。<推荐>);第二种方法是修改每个DataNode的namespaceID(位于/hdfs/data /current/VERSION文件中)<优先>或修改NameNode的namespaceID(位于/hdfs/name /current/VERSION文件中),使其一致。
3.第三个碰到的问题是在最后一步查看输出文档时。结果之前提示如下。
Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /opt/hadoop/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
14/08/13 13:55:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
大概就是说我本地库无法加载。
解决方法:查找到原因是因为hadoop用的是32位的库而系统是64位的。
想消除这个warning解决办法有两种,推荐第一种
一:安装32位库.详细过程于另外一篇文章.
二:需要编译一个64位的库。或者一开始就用源码安装。src地址 (http://mirror.bit.edu.cn/apache/hadoop/common/)
另外还需要安装 maven 和 CMake 还有protobuf (过程略)
最后进入源码目录 敲下 mvn package -Pdist,native -DskipTests 编译
结果出现了另外的问题,报出Error提示不准使用自关闭元素 <p/> 于是我去源码里把所有的<p/>删除了 (不知道是标准改变的原因还是什么)
之后还出现了各种各样的问题。。一般是缺少某个项目造成的 比如 protobuf 这个也得下 过程略。
4.使用hadoop dfsadmin -report 类似的操作时 提示:
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
解释:新版这样的命令已经由hadoop变成了hdfs
5.启动start-dfs.sh 时候 ,提示 Error: JAVA_HOME is not set and could not be found.
解决:我也不知道出现这样的问题是因为什么原因.在profile 和 bashrc 都已经添加了java_home .
没有办法 只好在
${HADOOP_HOME}/libexec/hadoop-config.sh 中第一行添加 export JAVA_HOME .解决成功
下面这两种方法在实际应用中也可能会用到。
1)重启坏掉的DataNode或其他的。当Hadoop集群的某单个节点出现问题时,一般不必重启整个系统,只须重启这个节点,它会自动连入整个集群。
在坏死的节点上输入如下命令即可:
bin/Hadoop-daemon.sh start DataNode
2) 动态加入DataNode或TaskTracker。这个命令允许用户动态将某个节点加入集群中。
bin/Hadoop-daemon.sh --config ./conf start DataNode
bin/Hadoop-daemon.sh --config ./conf start tasktracker
----------------------------------------
其他经验:
1.hadoop 命令设置(原始命令过长使用别名简化命令):在~/.bashrc 中添加如下:
#alias for hadoop
alias hls='hadoop fs -ls'
alias hlsr='hadoop fs -lsr'
alias hcp='hadoop fs -cp '
alias hmv='hadoop fs -mv'
alias hget='hadoop fs -get'
alias hput='hadoop fs -put'
alias hrm='hadoop fs -rm'
alias hmkdir='hadoop fs -mkdir'
alias hcat='hadoop fs -cat'
alias hrmr='hadoop fs -rmr'
alias hstat='hadoop fs -stat'
alias htest='hadoop fs -test'
alias htext='hadoop fs -text'
alias htouchz='hadoop fs -touchz'
alias hdu='hadoop fs -du'
alias hdus='hadoop fs -dus'
alias hchmod='hadoop fs -chmod'
alias hchgrp='hadoop fs -chgrp'
alias hchown='hadoop fs -chown'
alias htail='hadoop fs -tail'
alias hjar='hadoop jar'
以后就可以使用这些简化命令来代替了。
Hadoop伪分布安装配置的更多相关文章
- centos 6.4-linux环境配置,安装hadoop-1.1.2(hadoop伪分布环境配置)
1 Hadoop环境搭建 hadoop 的6个核心配置文件的作用: core-site.xml:核心配置文件,主要定义了我们文件访问的格式hdfs://. hadoop-env.sh:主要配置我们的j ...
- 【hadoop之翊】——基于CentOS的hadoop2.4.0伪分布安装配置
今天总算是把hadoop2.4的整个开发环境弄好了,包括 windows7上eclipse连接hadoop,eclipse的配置和測试弄得烦躁的一逗比了~ 先上一张成功的图片,hadoop的伪分布式安 ...
- hadoop伪分布安装
解压 将安装包hadoop-2.2.0.tar.gz存放到/home/haozhulin/install/目录下,并解压 #将hadoop解压到/home/haozhulin/install路径下,定 ...
- Hadoop伪分布安装详解(五)
目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...
- Hadoop伪分布安装详解(三)
目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...
- 转载 hadoop 伪分布安装
一. 概要 经过几天的调试,终于在Linux Cent OS 5.5下成功搭建Hadoop测试环境.本次测试在一台服务器上进行伪分布式搭建.Hadoop 伪分布式模式是在单机上模拟 Ha ...
- hbase伪分布安装配置
hbase1.2.4 伪分布式安装 注意:在安装hbase或者hadoop的时候,要注意hadoop和hbase的对应关系.如果版本不对应可能造成系统的不稳定和一些其他的问题.在hbase的lib ...
- linux配置Hadoop伪分布安装模式
1)关闭禁用防火墙: /etc/init.d/iptables status 会得到一系列信息,说明防火墙开着. /etc/rc.d/init.d/iptables stop 关闭防火墙 2)禁用SE ...
- Hadoop伪分布安装详解(二)
目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...
随机推荐
- mysql 常用技巧
1.正则使用 比 LIKE 会牺牲很多的系统资源 尽量不要用 正则的语法和JS PHP 差不多 select * from t1 where email REGEXP "@163[,.]co ...
- 进度条(ProgressBar)的功能与用法
进度条也是UI界面中一种非常实用的组件,通常用于向用户显示某个耗时操作完成的的百分比.进度条可以动态的显示进度,因此避免长时间的执行某个耗时的操作,让用户感觉程序失去了响应,从而更好的提高用户界面的友 ...
- 数据库基础-INDEX
http://m.oschina.net/blog/10314 一.引言 对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?希望本文对各位同仁有一定的帮 ...
- C# Linq to SQL — Group by
需求是需要统计数据库中表某一列的总数量,同时以List的形式返回到UI层. Linq to SQL中的Group by用法如下: IList<Unit.HandleCountClass> ...
- Windows Server 2008 R2防火墙出站规则
出战规则指Windows Server 2008 R2系统访问外部的某台计算机通信数据流. 配置防火墙阻止Windows Server 2008 R2系统通过IE软件访问外部的网站服务器,阻止Wind ...
- Java泛型类定义,与泛型方法的定义使用
package com.srie.testjava; public class TestClassDefine<T, S extends T> { public static void m ...
- TCP协议滑动窗口(一)——控制数据传输速率
窗口大小:TCP头中一个16位的域,表示当前可用接受缓冲区大小.在每个TCP对等段连接初始化时,告诉对方自己的窗口大小(不一定是满额,假如满额65201字节,可能暂时通告5840字节).若客户端接受数 ...
- css3模拟jq点击事件
还是这个梗,收好冷.今天是一个css3模拟jq点击事件,因为我发现,css3中没有类似于,js的点击事件,那么,可不可以仿照 jq的效果,类似的做一个呢?主要用到,input里面的radio 单选按钮 ...
- LoadRunner面试题
在LoadRunner中为什么要设置思考时间和pacing 答: 录制时记录的是客户端和服务端的交互,如果要精确模拟 用户的行为,那么客户操作客户端时花费了很多时间要怎么模拟呢?录入 填写提交的内容, ...
- javascript中对数据文本格式化的思考
在实际应用场景中,我们常常需将一些数据输出成更加符合人类习惯阅读的格式. 保留小数点后面两位 在一些要求精度没有那么准确的场景下,我们可以直接通过Number.prototype.toFixed()来 ...