Ubuntu15.10中安装hadoop2.7.2安装手册
太初
目录
1. Hadoop单点模式... 2
1.1 安装步骤... 2
0.环境和版本... 2
1.在ubuntu中创建hadoop用户... 2
2.安装ssh. 3
3.安装java环境... 3
4.安装hadoop. 4
5.测试... 5
2. Hadoop伪分布式... 5
2.1 安装步骤... 5
0.环境和版本... 6
1. 配置core-site.xml文件... 6
2. 配置hdfs-site.xml文件... 6
3. 格式化namenode. 7
4. 启动HADOOP. 7
5. JPS命令验证HADOOP进程... 8
6. WEB界面查HDFS信息... 8
7. 通过命令操作HDFS文件系统... 9
8. 测试... 9
3. Hadoop伪分布式(+YARN)... 10
3.1 安装步骤... 10
4. Hadoop集群... 12
4.1 安装步骤... 12
5. 其他补充... 18
6.1 LINUX经验... 18
6.1.1 开启bash的自动完成功能... 18
6.1.2 开启ubuntu虚拟机和win10宿主机的vmware tool(共享文件)... 18
6.1.3 Ubuntu的Terminal快捷方式... 19
6.1.4 Find命令举例... 19
6.1.5 PATH变量简述... 19
6.1.6 Ubuntu中安装vmware tools. 19
6.2 杂... 19
6.2.1 如何保存被禁止拷贝或存盘的HTML?... 19
6. 资料... 20
特别说明:
本文档是笔者研究了大量网络资料,然后自己实践成功后,汇总各方资料的结果。总结和分享的目的只有一个,让其他学友能少走弯路,集中精力解决业务问题,而不是环境搭建问题。在本文中引用了很多网络资料,图片,名称,信息等内容,如果涉及版权问题,请原作者及时联系并告知。谢谢。
“资料”章节收纳了本文用到后未用到的资源和连接,用于分享。
因能力所限,错漏之处敬请见谅。
感谢网络各位大神的信息分享,是你们的努力推动者技术的发展!
[Spark安装运行手册随后贴上,谢谢!]
1. Hadoop单点模式
1.1 安装步骤
0.环境和版本
ubuntu 15.10
jdk 1.8.84
hadoop 2.7.2
1.在ubuntu中创建hadoop用户
(备注:在GUI(图形)界面中可用“ctrl+Alt+T”快捷键打开Terminal(终端窗口),并输入下列命令。)
在Ubuntu终端窗口中,复制粘贴的快捷键需要加上 shift,粘贴是 ctrl+shift+v;拷贝是ctrl+shift+c;等等)
$ sudo useradd -m hadoop -s /bin/bash //新建hadoop用户
$ sudo passwd hadoop //修改密码为hadoop,等于账号,方便操作;
$ sudo adduser hadoop sudo //为hadoop增加管理员的权限,以免之后出现权限问题。
(备注:也可打开sudoers文件,给hadoop用户赋予和root一样的权限:$sudo gedit /etc/sudoers ;然后编辑增添如下那句hadoop ALL(ALL:ALL) ALL)
【重要】GUI中注销当前账户(root或Ubuntu安装初始用户,我这里是ya),并随后用hadoop再次登陆。
(可选:$sudo apt-get update //因为会用apt按照其他软件,如果未更新apt,有可能无法安装其他软件,可选!) 若出现如下 “Hash校验和不符” 的提示,可通过更改软件源来解决。若没有该问题,则不需要更改。 解决办法:【系统设置】(齿轮图标),选择【软件和更新】,点击 “下载自” 右侧的方框,选择【其他节点】,选择服务器,在列表中选中【mirrors.aliyun.com】,并点击右下角的【选择服务器】,会要求输入用户密码,输入即可。点击关闭后,此时会提示列表信息过时,点击【重新载入】,耐心等待更新缓存。完成会自动关闭【软件和更新】这个窗口。再尝试按照apt。如果还是提示错误,请选择其他服务器节点如 mirrors.163.com再尝试。更新成功后,再次执行 sudo apt-get update 就正常了。 |
2.安装ssh
$sudo apt-get install openssh-server //在Terminal中允许命令,下同
(备注:用yes来continue继续安装,一般install安装包默认都选y或yes就可)
(备注:Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server)
$sudo /etc/init.d/ssh start //安装好ssh服务后就打开它(尚未放入自启动!)
$ ps -e | grep ssh //查看ssh服务是否正确启动
$ ssh-keygen -t rsa -P "" //设置免密码登录,【在输入路径那儿直接回车!】
(备注:原理可能是设定空字符串为基础来生成的密钥对!)
(备注:在/home/hadoop/.ssh里面生成两个文件 id_rsa、id_rsa.pub,前者是私钥,后者是公钥)
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys //将公钥追加到authorized_keys里面
(备注:它保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容;“~”波折号代表用户主文件夹;)
$ssh hadoop@localhost //登录ssh(其他linux的Terminal重也可尝试如此操作:ssh hadoop@(IP|HOSTNAME);
(备注:第一次需要输入yes,确认初次登录,后续不用。)
$exit //退出ssh
(备注:userA@linuxPC1通过ssh登录了userB@linuxPC2,那么就登录uesrA获得了userB的权限,并等价于userB通过Terminal在linuxPC2上执行命令,此为ssh方便功能之一)
3.安装java环境
下载jdk二进制编译包
下载用wget软件,wget软件在ubuntu下的安装命令如下:
sudo apt-get install wget //按照wget程序,可直接通过“wget url链接 -o 输出文件名”来下载“*.tar.gz”。
(备注:举例用wget下载jdk包的命令格式为:wget http://download.oracle.com/otn-pub/java/jdk/8u51-b16/jdk-8u51-linux-x64.tar.gz?AuthParam=1437810421_1d235bda6e9428e1caa05d0fd7951c6d -o jdk-x64.tar.gz
(备注:建议直接在百度搜索“oracle JDK download”找到合适OS/64/32的JDK并直接通过浏览器下载到Ubuntu,再进行如下操作更放心!)
(备注:在Ubuntu的GUI中通过firefox下载JDK,默认保存路径在“/home/hadoop/下载”中,path含有中文,如果Ubuntu配置了“双拼/拼音”输入法,则可以在Terminal下使用中文!)
$sudo cp jdk-x64.tar.gz /usr/local/ //因hadoop权限不够,用sudo拷贝JDK到合适目录
$cd /usr/local/ //进入JDK包所在目录
$sudo tar xzvf jdk-x64.tar.gz //sudo来释放JDK
(备注:本人下载是当时最新的JDK1.8.0_74,故在/usr/local/目录下解压生成的jdk目录是/usr/local/jdk1.8.0_74)
$sudo apt-get install vim //Ubuntu15.10下默认vim下载但未安装,请下载安装,确保vim可用;
$sudo vim /etc/profile //配置如下JDK相关路径到profile
(备注:这几行配置应该加载到/etc/profile文件的“if [ -d /etc/profile.d ]; then”这一章节中,“done”行之后,“unset i” 行之前!另外,linux配置等号两边不能空格!)
export JAVA_HOME=/usr/local/jdk1.8.0_74
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
(备注:vim打开文本文件后,提示符默认在左上角且为命令模式,请马上输入“i”则进入“插入”模式;则可上下左右移动提示符并修改文本;
完成后马上用esc退出插入模式;随后用“shift+冒号”进入底部命令行模式,用wq命令保存并退出,q直接退出(如果未做任何修改);如果修改
则无法q,而必须用q!来强制直接退出(不保存);其他请详查web资料;)
$source /etc/profile //使修改的profile立即生效
$java –version //测试jdk是否安装成功;能正确显示JDK版本的就算安装成功;
4.安装hadoop
$sudo cp hadoop-2.7.2.tar.gz /usr/local/ //从hadoop官网下载最新hadoop包,比如2.7.2并拷贝到目的目录
$cd /usr/local
$sudo tar xzvf hadoop-2.7.2.tar.gz //解压;只能下载tar.gz给Ubuntu用;rpm格式是redhat专用
$sudo mv hadoop-2.7.2 hadoop //改名为hadoop方便后续操作
$sudo chown hadoop:hadoop -R -f /usr/local/hadoop/ //修改目录主人
$sudo vim /etc/profile //vim可用后,再次编辑profile,添加配置;
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
$ /usr/local/hadoop/bin/hadoop version //查看hadoop的版本及校验和等信息!
(备注: 如果安装了vmware tool并启用了共享目录,则可以从宿主PC拷贝文本和文件到虚拟机中;或通过teamviewer等软件拷贝文本和晚间!)
特别说明:校验MD5值 $cat ~/下载/hadoop-2.7.2.tar.gz.mds | grep 'MD5' //可列出md5检验值 $head -n 6 ~/下载/hadoop-2.7.2.tar.gz.mds //也可列出2.7.2校验值 md5sum ~/下载/hadoop-2.7.2.tar.gz | tr "a-z" "A-Z" //可根据二进制包来计算md5值并转为大写方便比较; 若文件不完整则这两个值一般差别很大,可简单对比前几个字符和后几个字符即可。
补充: Ubuntu15.10包含:md5sum,sha1sum,sha256sum等命令,通过man来查他们用法,既可以生成一个二进制文件的校验和,也可以验证校验和是否正确(要求校验和关联的二进制文件放在同一个目录)。 比如校验hadoop文件可用命令: sha256sum --check hadoop-2.7.2-tar.gz.mds (如果它是正确的SHA256格式,sha256sum会找到它内部指向的原始二进制文件,比如hadoop-2.7.2-tar.gz,并为它生成临时的SHA256来比较是否一致!) 目前看hadoop上下载的2.7.2二进制安装包是好的,但它的SHA256文件是不可视的乱码文件(非ANSI或UTF-8,也许是Unicode),所以可能以上命令及用法及猜想都是有问题的,毕竟hadoop网站不会错! |
5.测试
进入 hadoop目录:
$cd /usr/local/hadoop //进入hadoop目录
$mkdir ./input //example WordCount不会自动建立input目录,所以需要手动建立;
$cp *.txt ./input/ //拷贝若干文本文件到input让WordCount程序可以统计词频;
$rm -f -r /usr/local/hadoop/output/
//WordCount程序不会自动删除output,每次启动如果没有手动删除output就出错!
$./bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output //wordcountl例子,统计input目录下所有文件可读词汇的词频并写入output中
$cat ./output/* //查看运行结果
$./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep ./input ./output 'dfs[a-z.]+' // grep 例子,将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中
$cat ./output/* //查看运行结果
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar //查看更多Hadoop 附带的例子说明,包括 wordcount、terasort、join、grep 等。
(备注:运行官方测试样例如上;遇到问题请添加input目录,删除output目录;结果在output\part-r-00000中;)
(备注:特别注意,如果通过VMware的共享目录,放了一些window的文本文件到hadoop的input目录,因为“文件结果linux和win不同”则hadoop会报错,但初看仍然会继续执行得到结果!)
#####至此,单点hadop的安装和demo测试完成!(不含hdfs/yarn伪分布式安装内容) #####
2. Hadoop伪分布式
伪分布式模式是基于单机模式顺利安装测试通过后的进阶尝试;
其使用的软件版本和环境都和单机模式没有区别,仅是通过新增配置来使伪分布模式起效并取代单机模式的运行;
后面有关于模式之间切换的介绍;
2.1 安装步骤
0.环境和版本
(完全和单机模式一致)
ubuntu 15.10
jdk 1.8.84
hadoop 2.7.2
1. 配置core-site.xml文件
(说明:Hadoop 可以在单节点上以伪分布式的方式运行;Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件,而不再是Ubuntu操作系统的ext4下面的文件;)
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml。配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。修改配置文件 core-site.xml原来内容为空的标签“<configuration></configuration>”
(备注:因为是XML文件,不是普通INI/CONF/TXT等配置文件,所以不可以用#井号做备注,应该用<!—XXX -->来添加注释!)
修改为下面配置: <configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
|
2. 配置hdfs-site.xml文件
同样修改配置文件 hdfs-site.xml: <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration> XML
|
(说明:虽然官方教程只需配置 fs.defaultFS 和 dfs.replication两项就可以运行hadoop,但若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。)
3. 格式化namenode
./bin/hdfs namenode –format //配置完成后,需格式化 NameNode方能使用;
(备注:成功的话,会看到 “successfully formatted” 和 “Exitting with status 0″ 的提示;若为 “Exitting with status 1″ 则是出错。)
(注意:这一步若提示 Error: JAVA_HOME is not set and could not be found. 的错误,则需要在文件 ./etc/hadoop/hadoop-env.sh 中设置 JAVA_HOME 变量;比如找到“export JAVA_HOME=${JAVA_HOME}”,改为“export JAVA_HOME=/usr/local/jdk1.8.0_74”,并重新尝试格式化即可。最好总是添加!)
4. 启动HADOOP
./sbin/start-dfs.sh //开启 NameNode 和 DataNode 守护进程
(备注:出现SSH提示,输入yes即可)
注意:启动时可能会出现如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN 提示可以忽略,并不会影响正常使用。但最好修复它; 解决方法是编辑hadoop-env.sh, 在最后添加“export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_INSTALL/lib/native”
|
5. JPS命令验证HADOOP进程
启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”;JPS命令以后会多次用于yarn和真实分布式模式中;
Jps //通过jps查看启动的Hadoop进程
错误1:如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试。
错误2:如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,通过查看启动日志排查原因。
错误3:如果DataNode没启动,一般情况下,可尝试如下方法恢复。但这会删除 HDFS中原有数据,请谨慎!):
./sbin/stop-dfs.sh //关闭hadoop(hdfs)
rm -r ./tmp //删除 tmp 文件,这会删除 HDFS 中原有的所有数据
./bin/hdfs namenode -format //重新格式化 NameNode
./sbin/start-dfs.sh //重启
排错方法:可查启动日志来排查原因,注意几点:
启动时会提示形如 “DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out”,其中 DBLab-XMU 对应你的机器名,但其实启动日志信息是记录在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以应该查看这个后缀为 .log 的文件;启动日志都是追加的,拉到最后查看最新内容,log每行有时间信息。出错通常写着 Fatal、Error、Warning 或者 Java Exception 的地方。可在网上搜索出错信息,找到相关解决方法。
6. WEB界面查HDFS信息
http://localhost:50070/;当成功启动后,可以访问 Web 界面来查看 NameNode 和 Datanode 信息,还可在线查看 HDFS 中的文件。在“Utilities”菜单下“Browse the file system”中可看到在hdfs上建立的目录“/user/hadoop”等,而在ubuntu的文件系统ext4上看不到!
|
7. 通过命令操作HDFS文件系统
单机模式下运行“grep/WordCount”等例子读取的是Ubuntu的ext4中的本地数据,而伪分布式读取的则是 HDFS 上的数据。为了使用 HDFS,需要在 HDFS 中创建用户目录,增删改查文件和目录。
./bin/hdfs dfs -mkdir -p /user/hadoop //在HDFS创建hadoop用户
./bin/hdfs dfs -mkdir input //新建hadoop用户后自动转到其目录下,现在新建input目录,在hadoop目录下
./bin/hdfs dfs -put ./etc/hadoop/*.xml input //将Ubuntu的ext4目录下的xml文件拷贝到hdsf的hadoop\input目录下;
./bin/hdfs dfs -ls input //复制完成后,查看文件列表;
(说明:伪分布式模式运行的MapReduce 作业的方式跟单机模式相同,但区别在于伪分布式读取的是HDFS中的文件,而不是Ubuntu的ext4下的output和input目录;可以将单机模式步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。
8. 测试
执行“grep”example:
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
$ ./bin/hdfs dfs -cat output/* //查看hdfs上的结果;
执行“wordcount”example:
./bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output
(备注:此句和单点运行模式时一模一样,但是因为hadoop启动为伪分布式,所以从hdfs里的input读数据并写入output中去,不会再访问ubuntu的文件系统ext4了。结果可以通过本机50070的portal登陆查看hdfs文件系统的变化,并下载结果到ext4中。)
查看运行结果(查看的是位于 HDFS 中的输出结果):
./bin/hdfs dfs -cat output/*
也可从HDFS取回运行结果到本地ext:
rm -r ./output # 先删除本地的 output 文件夹(如果存在)
./bin/hdfs dfs -get output ./output # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*
(再次运行)Hadoop伪分布式的grep
./bin/hdfs dfs -rm -r output # 删除 output 文件夹
(备注:Hadoop 运行grep或wordcount时,输出目录不可存在,否则会提示错误 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,需先删除 output 文件夹;在实际开发应用程序时,也可考虑在程序中加上如下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作,如下:)
Configuration conf = new Configuration(); Job job = new Job(conf); /* 删除输出目录 */ Path outputPath = new Path(args[1]); outputPath.getFileSystem(conf).delete(outputPath, true);
|
关闭 Hadoop:
./sbin/stop-dfs.sh
再次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh 就可以!
3. Hadoop伪分布式(+YARN)
3.1 安装步骤
启动YARN 启动 Hadoop 后,没有原来的JobTracker 和 TaskTracker,因为新版Hadoop使用了新的MapReduce V2框架,称为 YARN(Yet Another Resource Negotiator)。YARN 从 MapReduce 中分离出来,负责资源管理与任务调度。 YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性。伪分布式HADOOP可以不安装和启动YARN。 通过 ./sbin/start-dfs.sh启动Hadoop后,仅是启动了供MapReduce使用的HDFS环境,为了启动 YARN来负责资源管理与任务调度。需要修改配置文件 mapred-site.xml: mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml //先从默认template重命名 用vim编辑如下: <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 再修改配置文件 yarn-site.xml: <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> ./sbin/start-yarn.sh /YARN(需先启动HDFS/MR) ./sbin/mr-jobhistory-daemon.sh start historyserver //启动历史服务器,才能在Web中查看任务运行情况; 通过 jps命令查看到(NodeManager,ResourceManager,NameNode,DataNode)进程都启动了; 启动 YARN 之后,运行实例的方法还是一样,但资源管理方式和任务调度不同。观察日志信息可以发现,不启用 YARN 时,是 “mapred.LocalJobRunner” 在跑任务,启用 YARN 之后,是 “mapred.YARNRunner” 在跑任务。启动 YARN的好处是通过Web界面http://localhost:8088/cluster可以查看任务运行情况:
YARN 主要是为集群提供更好的资源管理与任务调度,然而这在单机上体现不出价值,反而会使程序跑得稍慢些。 如果不想启动 YARN,务必把配置文件 mapred-site.xml重命名,比如改回到mapred-site.xml.template,需要用时再改回来。否则该配置文件存在但未开启 YARN的情况下,运行实例程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032″ 的错误,这就是为何该配置文件初始默认文件名为 mapred-site.xml.template的原因。 (备注:先关闭yarn再rename它的配置比较好!Ubuntu用mv而不是rename来修改文件名称! Ubuntu下面rename是另一个较为复杂但强大的正则表达式命令,一般用来批量重命名文件之用) ./sbin/stop-yarn.sh //关闭YARN ./sbin/mr-jobhistory-daemon.sh stop historyserver //关闭history服务器,WEB也没了;
补充hdfs命令: hadoop@ya-chy-pc-vm:/usr/local/hadoop$ hadoop fs -ls -R / 列出虚拟hdfs的根目录/下所有文件 –R是递归 hadoop@ya-chy-pc-vm:/usr/local/hadoop$ ./bin/hdfs dfs -mkdir /user/hadoop/output 新建hdfs指定目录(绝对路径) hadoop@ya-chy-pc-vm:/usr/local/hadoop$ ./bin/hdfs dfs -rm -r /user/hadoop/output 递归删除指定目录
|
4. Hadoop集群
4.1 安装步骤
前面已经描述了Hadoop的单点安装,伪分布式安装及YARN的使用,这里再描述集群安装的要点。 我们基于之前安装的目录假设,仅对有区别的做特别提醒,否则请翻看前面内容。 另外,一些注意点和要点,可能也类似,前面提醒过的,无非重要,不再提醒,假设读者已经充分熟练掌握前面几种安装情况,并顺利运行。
笔者的网络拓扑环境如下: 台式PC(宿主机/AMDK8/8G/win10):192.168.1.X(路由器DHCP动态分配) 台式PC(虚拟机/AMDK8/3G/Ubuntu15.10+虚拟机网络模式为桥接模式):192.168.1.220(master)固定IP 笔记本PC(E5420/i3/2GB/Ubuntu15.10):192.168.1.201(slave1)固定IP 笔记本PC(E5400/双核/2GB/Ubuntu15.10):192.168.1.202(slave2)固定IP 两两都能ping通,可以路由得到彼此,算在一个局域网内。 两两建立SSH后,可以用SCP(如下),将下载好的JDK/HADOOP等拷贝到其他host主机上。(用有线网络所在的HOST下载安装包最快。) scp hadoop-2.7.2.tar gz hadoop@192.168.1.6:/home/hadoop/ 或 scp hadoop-2.7.2.tar gz hadoop@slave1:/home/hadoop/ 其他类似
主要流程:
a) Hostname建议用常用且含有明确的master和slave。
a) 如果安装过单点或伪分布式就已经正确安装了hadoop,只有配置有些变化而已。 3. 在Slave节点配号 hadoop 用户; 4. 将 Master节点上的/usr/local/hadoop目录复制到其他Slave节点上(为了快并保持配置一致,这样比较简单); 5. 在 Master节点上开启Hadoop,就启动了整个Hadoop集群。
准备IP和网络
任何配置前,建议都先关闭 Hadoop (/usr/local/hadoop/sbin/stop-dfs.sh),再进行后续集群配置。
sudo vim /etc/hostname //修改“hostname=master”,其他slave等集群机器都要修改;注意大小写; sudo vim /etc/hosts //修改为如下,其他slave等集群机器都要修改;注意大小写; “192.168.1.201 slave1” “192.168.1.202 slave2” “192.168.1.220 master” “127.0.0.1 localhost”
对master和每个slave机器都做如上hostname和hosts配置,且重启动(才能体现出hostname) 注意:hosts文件中只有一个 127.0.0.1,对应名为 localhost,有多余应删除,特别不能有 “127.0.0.1 master”等
SSH配置: 这个和单点类似,只不过要让master可以操控各个slave机器,所以额外做如下操作: cd ~/.ssh //如果以前安装hadoop生成过ssh,就会有该目录; rm ./id_rsa* //删除OLD公匙(因为hostname变化了) ssh-keygen -t rsa //一直按回车就可以(这样就生成了无密码的密钥对) cat ./id_rsa.pub >> ./authorized_keys //将公钥id_rsa.pub写入认证文件authorized_keys中 ssh master //尝试master本机的无密码SSH登陆,测试通过就继续后续处理 scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/ //将公钥也拷贝到slave1机器上;
#以下在slave1机器上执行,其他slave类似 mkdir ~/.ssh //如果不存在该文件夹需先创建,若已存在则忽略。Slave1如果自己弄过SSH,就会有它。 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys //将master的公钥加入本地授权文件; rm ~/id_rsa.pub //删除master公钥
#以下在slave1机器上执行,其他slave类似 ssh slave1 //在master机器上执行,尝试无密码SSH登陆slave1,成功后,其他slave都配置好测试完。
路径配置: 在路径(etc/profile)中增加行“export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin”,如果做过之前的点单等配置,应该已经有了,可以查所有集群的相关配置。并source一下,应用更新。
设定集群相关配置文件: 集群/分布式模式需要修改/usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置请查官方说明。这里仅设置为了正常启动所必须的设置项:slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
1.文件slaves 该文件记录所有DataNode 的主机名,每行一个hostname字符串,默认为 localhost(伪分布式模式时,slaves文件默认为localhost,则节点即作为NameNode也作为DataNode)。分布式配置可以保留 localhost,也可删掉,让master 节点仅作为 NameNode 使用。 这里请添加如下内容: “slave1 slave2” 两行,master 节点仅作为NameNode使用,不作为datanode。请将localhost行删除。
2文件core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
3文件hdfs-site.xml 我们有slave1和slave2所有dfs.replication填写2,它指定dfs分布式文件系统的replication数目。 <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>Master:50090</value> </property> <property> <name>dfs.replication</name> <value>2/value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
4文件mapred-site.xml 默认安装完是mapred-site.xml.template,请重命名。
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration> 备注:注意master大小写最好一致,几个配置文件都要注意。
5文件yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
从master复制配置到各slave机器: 将 master上/usr/local/Hadoop文件夹复制到各个节点上。如果以前有安装配置运行过伪分布式模式,建议在切换到集群模式前备份(或删除)之前的临时文件,以便出现问题。 在master 节点上执行: cd /usr/local sudo rm -r ./hadoop/tmp //删除无用临时文件 sudo rm -r ./hadoop/logs/* //删除日志 tar -zcf ~/hadoop.master.tar.gz ./hadoop //压缩 cd ~ scp ./hadoop.master.tar.gz slave1:/home/hadoop //从master复制目录压缩包到slave1机器; 在 slave1 节点上执行: sudo rm -r /usr/local/hadoop //删掉旧的(或mv备份到比如“Hadoop-standalone”等等) sudo tar -vzxf ~/hadoop.master.tar.gz -C /usr/local //解压缩 sudo chown -R hadoop:hadoop /usr/local/hadoop //变更目录owner权限,让hadoop用户可用此目录
同样对其他slave进行处理。
首次运行:
首次启动需要先在master节点执行NameNode的格式化: 在master节点上运行: hdfs namenode -format //首次运行需要执行初始化(一大堆log输出,开启NameNode,格式化并再次关闭)
关闭防火墙: Ubuntu15.10如果是desktop默认配置的防火墙不会影响hadoop各种模式的运行。但如果是server版本,比如centOS这种偏服务器的版本,可能默认/etc/init.d/iptables会启动,可以停掉它,请查相关资料。
启动Hadoop集群: 在 Master 节点上执行: start-dfs.sh //一般在/usr/local/hadoop/sbin,下同; start-yarn.sh mr-jobhistory-daemon.sh start historyserver 通过命令jps可以查看各个节点所启动的进程。正确的话,在Master节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程。在Slave节点可以看到 DataNode 和 NodeManager 进程。缺少任一进程都表示出错。 还可在Master节点上通过“hdfs dfsadmin –report”查看DataNode是否正常启动,Live datanodes为2(2个slave机器都是datanode),则说明集群启动成功。
通过Web查看集群状态: http://master:50070/ 查看DataNode,NameNode 的状态。如果不成功,通过启动日志排错。Log4j应该配置好(前面有详述,不在累赘)。
运行分布式集群的例子: 方法和伪分布式一样(伪分布式就是为了让你联系分布式的,所以理应差别不大)。 hdfs dfs -mkdir -p /user/hadoop //首先创建HDFS上的用户目录 hdfs dfs -mkdir input //为hdfs分布式系统建立input目录 hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input //从Ubuntu本地ext4文件系统拷贝文件到hdfs http://localhost:50070/ //web查看DataNode的状态(占用大小会改变),文件确实复制到了DataNode中
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+' //运行MapReduce作业 说明:上述命令hadoop位于/usr/local/hadoop/bin/hadoop,因为设定过PATH,所以可以直接执行;运行时的输出信息与伪分布式类似,会显示Job 的进度。可能会有点慢,但如果迟迟没有进度,比如 5 分钟都没看到进度,那不妨重启 Hadoop 再试试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改 YARN 的内存配置解决。
查看job运行情况: 通过Web界面查看JOB进度http://master:8088/cluster ,点击 “Tracking UI”这列的 History 连接,可看任务运行信息。
关闭集群: stop-yarn.sh //在master节点上关闭yarn stop-dfs.sh //再master节点上关闭hdfs分布式文件系统 mr-jobhistory-daemon.sh stop historyserver //在master上关闭跟踪信息 备注:你同样也可以和伪分布式类似而选择不启动YARN,但除了不start-yarn.sh之外,要记得改掉mapred-site.xml 的文件名,比如将它mv为原来的mapred-site.xml.template。
至此,基本上分布式hadoop集群最基本的搭建运行和启停都算弄了一下。还有大量的配置和调优工作需要研究。 提醒:千万不要为了调优和调优,分布式计算系统(包括以后将介绍的SPARK)主要是为了解决问题,先跑通解决问题是一个领域或维度;而调优并让问题解决的更漂亮是另外一个维度和领域,两者并无必然的联系;建议还是先用上分布式(hadoop和spark),再考虑一定数据量和计算量情况下的调优。这是两个工种,如同研发工程师和产业化工程师的区别。
Hadoop各种模式切换及说明:
1伪分布式安装的说明: 请参考相关文档,配置起效hdfs,则input和output目录都放到hdfs中,实现正在的基于hdfs高层文件格式之上的分布式;但因为实在一台PC或虚拟机的Ubuntu上操作,所以叫伪分布式,任务并未分发给不同的PC节点! 2伪分布式安装的yarn说明: 伪分布式允许可单独靠hadoop;也可升级安装yarn来支持hadoop,则有更方便查看的web界面来观察yarn的分布式允许; 3分布式安装说明: 请虚拟或实际配置至少2或多个PC节点,来测试真实分布式hadoop系统;配置和允许和伪分布式差不多,只是多了ssh/SCP/HOSTNAME配置等内容,原理类似; 4单点和伪分布式切换: 备份并确保文件(mapred-site.xml.template)不存在;备份并确保文件(core-site.xml)为初始状态,就是“configuration标签内部是空的!”;则可以按照单点模型运行mapreduce的WordCount例子,并在单点所在的ext4的Ubuntu系统内发现output文件输出(而不会输出到hdfs上); 5伪分布式是否启动YARN: 按正常命令关闭YARN;备份并确保文件(mapred-site.xml.template)不存在;则会运行不带YARN的伪分布式模式,否则即使不启动yarn,run的时候也会出错! 6伪分布式和分布式切换: 两者无本质区别,只是将namenode,datanode,hdfs,各类manager等网元配置分不到不同的PC上而已;其实“伪分布式模型”等价于启动hadoop+hdfs+yarn的最小网元集合,而网元们都指向或曰安装在同一个PC上。 1. 从分布式切换到伪分布式时,不要忘记修改 slaves 配置文件; 2. 在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以如果集群以前能启动,但后来启动不了,特别是 DataNode 无法启动,不妨试着删除所有节点(包括 Slave 节点)上的 /usr/local/hadoop/tmp 文件夹,再重新执行一次 hdfs namenode -format,再次启动试试。
|
5. 其他补充
6.1 LINUX经验
6.1.1 开启bash的自动完成功能
$sudo vim /etc/bash.bashrc //修改此文件;按需输入密码
找到文件中的如下脚本片段,去掉本小节第一行外的所有前导#号;
这就开启了目录/文件自动补全和完成的智能功能,大大提升terminal中bash命令的运行效率。
#enable bash completion in interactive shells
#if ! shopt -oq posix; then
# if [-f /usr/share/bash-completion/bash_completion ]; then
# . /usr/share/bash-completion/bash_completion
# elif [ -f /etc/bash_completion]; then
# . /etc/bash_completion
# fi
#fi
6.1.2 开启ubuntu虚拟机和win10宿主机的vmware tool(共享文件)
如果不是真实PC,而是用虚拟机且是VMware,那么可以安装VMware tool,并使用共享目录,在宿主机和虚拟机上传递文件,拷贝文字等;
网络连接:http://blog.csdn.net/zybasjj/article/details/7401808 (VMware虚拟机安装Ubuntu使用share folders共享windows目录的方法)
步骤:
1.关闭ubuntu虚拟机后,在虚拟机配置中设定CD/DVD-ROM指向vmware安装目录下的”linux.iso”(如果是win虚拟机则指向windows.iso);
2.启动ubuntu虚拟机发现taskbar上有VMware Tools的光盘图标;双击查看;
3.发现多个文件,比如:manifest.txt和 VMwareTools-10.0.5-3228253.tar.gz等,将套们都拷贝到 /tmp 下;
4.进入cd /tmp;并解压缩tar zxvf VMwareTools-8.4.5-324285.tar.gz;
5.进入cd vmware-tools-distrib(进入解压后对应文件夹);
6.sudo ./vmware-install.pl 命令来安装VMware tool;会提示输入登陆用户的密码;然后有不断的提示,主要都按回车,最后会出现: Enjoy, --the VMware team,就算按照完毕!
7.在宿主机(比如win10)上对vmware中的ubuntu虚拟机的配置中“共享目录”进行设定,一般不勾选只读;进入ubuntu虚拟机后会在 /mnt/hgfs/xxx 下发现win10上的文件了!(xxx就是win10宿主机上设定的共享目录)
8.注意win和linux的文件结尾不同,尤其是带回车换行的文本文件等;二进制文件可能好点;
6.1.3 Ubuntu的Terminal快捷方式
Ubuntu下Ctrl+Alt+T调用出Terminal界面。
6.1.4 Find命令举例
sudo find / -name 'mapred-site.xml' //在根目录查找此文件名的文件
6.1.5 PATH变量简述
可执行 echo $PATH(或export $PATH,看用的什么shell环境了) 查看它是包含了很多目录的字符串。例如我们在主文件夹 ~ 中执行 ls 这个命令时,实际执行的是 /bin/ls 这个程序,而不是 ~/ls 这个程序。系统是根据 PATH 这个环境变量中包含的目录位置,逐一进行查找,直至在这些目录位置下找到匹配的程序(若没有匹配的则提示该命令不存在)。
我们一般先进入/usr/local/hadoop 目录中,再执行 sbin/hadoop,实际上等同于运行 /usr/local/hadoop/sbin/hadoop。我们可以将 Hadoop 命令的相关目录加入到 PATH 环境变量中,这样就可以直接通过 start-dfs.sh 开启 Hadoop,也可以直接通过 hdfs 访问 HDFS 的内容,方便平时的操作。
我们如果在 ~/.bashrc 中设置PATH,比如“export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin”,并用source ~/.bashrc使设置生效;之后在任意目录中,都可以直接使用 hdfs 等命令。比较方便。
6.1.6 Ubuntu中安装vmware tools
如果要升级或安装,可以通过$sudo apt-get install open-vm-tools 来安装和升级;
也可以从网络下载“linux.iso”的vmware tools的镜像光盘,放入虚拟机的DVD/CDROM中,启动后多出一个盘,位于“/media/username/VMware tool/”目录中,然后将“VMwareTools-10.0.0-2977863.tar.gz”文件拷贝到比如/tmp目录,解压并运行“./install.pl”就能安装了。
别忘记启动虚拟机配置中设定外界的宿主系统(比如WIN10)的一个目录(比如叫sharedfolder)为共享目录,进入虚拟机后,自动mount挂在到“/mnt/hgfs/sharedfolder”这样可以共享文件了。
6.2 杂
6.2.1 如何保存被禁止拷贝或存盘的HTML?
当html或mht等页面禁止保存或拷贝内容的时候,可以查看源码并保存为html后缀文件。
然后本地打开拷贝黏贴其内容。
如果是zh-cn而非通用的3字节utf-8编码,则可以用诸如notepad++等软件打开html并转换为utf8,保存再次打开,就能拷贝黏贴了。
6. 资料
本文内容是笔者从网络资料中收集,整理,实践,修订,备注而成。
一为整理学习,方便以后查阅参考;
二为方便他人学习交流之用;
以下罗列资料只有部分研究过,仅供参考,并无倾向性推荐。
感谢开放的网络。感谢网络上各位的分享!
ubuntu15.04安裝hadoop2.6.0及eclipse开发环境配置:http://www.linuxdiyf.com/linux/12474.html
Ubuntu15.04单机/伪分布式安装配置Hadoop与Hive试验机:http://www.linuxdiyf.com/linux/11858.html
Ubuntu下安装Hadoop(单机版):http://www.linuxdiyf.com/linux/11372.html
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html
http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html
http://www.micmiu.com/bigdata/hadoop/hadoop-2x-ubuntu-build/
http://www.powerxing.com/install-hadoop/ 笔记Hadoop
Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS
使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0
使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS
Hadoop-in-Practice第四章MapReduce-Join代码运行问题
Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0
大数据教材推荐
林子雨老师(研究生导师)编著的《大数据技术原理与应用》,该教程是针对高校学生打造的入门级教材,目前已被多所高校作为大数据课程指定教材。
林子雨主讲入门级大数据在线课程(视频)