注意centos主机名不支持下划线,所以文章中若出现centos_02.com,请替换为
centos02.com
vmware虚拟机上的centos安装Hadoop
- 安装vmware虚拟机
- 虚拟机上安装centos
- centos上安装hadoop
一。安装vmware虚拟机
下载: VMware Workstation Pro下载地址
安装
二。虚拟机上安装centos
打开vmware,点击创建新的虚拟机
虚拟机名称指的是给自己创建的这个虚拟机起个名字, 位置是指你要存放的地址。
这个根据自己电脑的内存大小决定, 因为我电脑的内存是8GB, 所以这里我给虚拟机分配的内存为1GB
到这里虚拟机创建完成,因为刚才选择的是创建空白虚拟机,所以这里开始给虚拟机装 centos操作系统
- 首先下载centos镜像文件
点击‘CD/DVD’
选择刚才下载的centos镜像文件的存放地址, 然后点击确定
点击开启此虚拟机
过一会点击‘重新引导’
此时centos系统安装完毕, 接下来给centos系统进行一些简单的配置
这里没有创建用户, 你们想创建的话,也可以。
设置一下当前日期和时间
我这里因为内存不够,所以kdump无法启用, 如果你们的内存够的话,就选择启用(默认), 然后点击完成
进入centos后发现无法从windows复制内容到centos
解决办法 :安装VMware Tools
进入centos, 更改centos主机名
vi /etc/sysconfig/network
重启,然后执行hostname, 会发现主机名更改成功
设置网络映射
vi /etc/hosts
通过ping centos_02.com 检查是否设置成功
编辑DNS解析配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
编辑本地hosts文件,添加到此虚拟机的DNS映射
hosts文件位置:C:\Windows\System32\drivers\etc
三。centos上安装hadoop
-
解压jdk和hadoop压缩包到
/opt/moduels/tar -zxf ../software/jdk-8u162-linux-x64.tar.gz -C ./tar -zxf ../software/hadoop-2.5.0-cdh5.3.6.tar.gz -C ./
- 编辑selinux 文件,将SELINUX改为disabled
vi /etc/sysconfig/selinux
- 关闭防火墙
service iptables status 查看防火墙状态
service iptables stop 关闭防火墙
chkconfig iptables off禁止防火墙开机自启动
- 配置JDK
查看是否自带JDK:rpm -qa | grep java
因为我们要的不是openjdk,所以删掉这里所有的openjdk,用我们自己下载的 jdk, 卸载命令:rpm -e --nodeps <文件名>
编辑profile文件, 配置JDK路径( vi /etc/profile)。
在文件的末尾添加
export JAVA_HOME=/opt/moduels/jdk1.8.0_162
export PATH="$PATH:$JAVA_HOME/bin"
运行:source /etc/profile 使配置生效
最后通过Java -version进行验证
- 配置Hadoop
首先在centos桌面上建立startHDFS.bat,和stopHDFS.bat文件。留待以后使用
startHDFS.bat文件的内容为
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start namenode
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start datanode
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh start secondarynamenode
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/mr-jobhistory-daemon.sh start historyserver
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh start resourcemanager
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh start nodemanager
echo ****启动的服务有****
jps
stopHDFS.bat文件的内容为
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop namenode
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop datanode
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/hadoop-daemon.sh stop secondarynamenode
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/mr-jobhistory-daemon.sh stop historyserver
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh stop resourcemanager
../../opt/moduels/hadoop-2.5.0-cdh5.3.6/sbin/yarn-daemon.sh stop nodemanager
echo ***关闭一些服务后***
jps
Hadoop在文章开头已经上传过了, 它位于/opt/moduels/hadoop-2.5.0-cdh5.3.6
1.删除/opt/moduels/hadoop-2.5.0-cdh5.3.6/share/doc/下的所有文件,这一步不是必须的,只是因为这里面的东西非常大,而我们又用不上,删除可以避免浪费不必要的空间。
2.编辑hadoop安装目录下etc/hadoop/hadoop-env.sh,更改JAVA_HOME路径
3.编辑hadoop安装目录下etc/hadoop/mapred-env.sh,更改JAVA_HOME路径
4.编辑hadoop安装目录下etc/hadoop/yarn-env.sh,更改JAVA_HOME路径
5.编辑Hadoop安装目录下的etc/hadoop/core-site.xml文件
<configuration>
<property>
<name>fs.defaultFS</name>不变
<value>hdfs://centos_02.com:9007</value>变
</property>
<!--用来指定使用hadoop时产生文件的存放目录-->
<property>
<name>hadoop.tmp.dir</name>不变
<value>/opt/moduels/hadoop-2.5.0-cdh5.3.6/data/temp</value>根据安装路径的不同会有所变化
</property>
</configuration>
6.编辑Hadoop安装目录下的etc/hadoop/hdfs-site.xml文件
<configuration>
<property>
<name>dfs.replication</name>不变
<value>1</value>不变
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>不变
<value>centos_02.com:50090</value>变
</property>
<property>
<name>dfs.permissions</name>
<value>false</value> 允许访问hdfs
</property>
</configuration>
6.编辑Hadoop安装目录下的etc/hadoop/slaves文件,填写主机名
7.hadoop安装目录下进行格式化 bin/hdfs namenode -format
8.启动namenode, secondarynamenode,和datanode, 并执行jps查看是否启动成功
在安装目录下依次执行以下三条命令
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
sbin/hadoop-daemon.sh start secondarynamenode
jps
9.通过centos02.com:50070可访问到页面
10.创建lee文件夹, Hadoop安装目录下执行 bin/hdfs dfs -mkdir -p lee
访问centos02.com:50070,可看到lee文件
11.上传文件,Hadoop安装目录下执行
bin/hdfs dfs -put etc/hadoop/core-site.xml /user/root/lee
12.读取文件, bin/hdfs dfs -text /user/root/lee/core-site.xml
13.下载文件,bin/hdfs dfs -get /user/root/lee/core-site.xml /home
14.此时可以进入centos02.com:50090
- 配置mapreduce
1.在Hadoop安装目录下执行
mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
vi etc/hadoop/mapred-site.xml
更改文件为以下内容
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>centos02.com:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>centos02.com:19888</value>
</property>
</configuration>
2.在Hadoop安装目录下执行
vi etc/hadoop/yarn-site.xml
更改文件为以下内容
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>centos02.com</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
3.启动resourcemanager, nodemanager
Hadoop安装目录下执行
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
并用jps命令进行检验
4.此时centos02.com:8088是可以访问的
- 现在跑一个单词统计的任务
首先建立/opt/datas/file.input文件,内容在网上随便搜一遍英语文章放里面就好
1.创建文件
bin/hdfs dfs -mkdir -p mapreduce/input
2.上传文件
bin/hdfs dfs -put /opt/datas/file.input /user/root/mapreduce/input
3.在yarn上运行的脚本必须打包成jar包,所以执行以下命令
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /user/root/mapreduce/input /user/root/mapreduce/output
4.打开centos02.com,点击
Utilities->Browse the file system->user->root->mapreduce->output
可看到执行后输出的文件
5.通过bin/hdfs dfs -text /user/root/mapreduce/output/p* 可查看结果
eclipse上运行mapReduce项目, 并将文件输出到HDFS中
- 配置hadoop的环境变量
- 配置jdk的环境变量
- 官网下载eclipse Java版
- 打开eclipse window ->> show view ->>Other->> Map/Reduce locations 然后新建location
- 从centos导出hadoop安装包放到本地, 并在引入到eclipse中 点击windows=>preferences
- 准备Hadoop.dll和winutils.exe,将这两个文件放到hadoop安装目录下的bin目录下,然后拷贝hadoop.dll到C:\Windows\System32目录下
- 下载hadoop对应的Eclipse插件,放到eclipse安装目录的plugins目录中,重启Eclipse
- 准备Hadoop2的测试代码CountMapReduce.java, 内容如下
package hdfs; //所在的目录名字
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class CountMapReduce {
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println(otherArgs.length);
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
}
Job job = new Job(conf, "word count");
job.setJarByClass(CountMapReduce.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
- 新建Hadoop项目, 并引入CountMapReduce.java
- 在eclipse中引入Hadoop的所有依赖包,方法请自行百度
- 运行,请右键CountMapReduce.java,点击Run as=>run Configurations, 选择Arguments选项框, 来给CountMapReduce.java配置输入输出地址
eclipse 搭建hadoop环境时遇到的问题,及解决方法
问题1
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0
- 解决方法
拷贝
hadoop-2.5.0-cdh5.3.6\src\hadoop-common-project\hadoop-common\src\main\java\org\apache\hadoop\io\nativeio文件夹下的NativeIO.java到项目中,并修改572行为 return true;
问题二
tmp无权限
- 解决方法
修改centos上的hdfs-site.xml加上以下内容
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>