title | date | update | tags | categories | ||||
---|---|---|---|---|---|---|---|---|
hadoop单机安装、运行 |
2017-12-28 14:28:13 -0800 |
|
hadoop |
Tanyibing,this is for 14级软件工程专业,My email [email protected] link
- VMware版本VMware-workstation-full-12.5.7-5813279(版本自己选择)Xshell5自己选择是否使用
- CentOS版本CentOS-6.4-x86_64-bin-DVD1(本人的是64位,其他版本未测试)
- Hadoop版本hadoop-2.6.0(安装完系统后直接命令行安装)
- jdk版本jdk-8u45-linux-x64.tar
- 需要了解基本的linux和vim的使用
百度网盘:https://pan.baidu.com/s/1i5s2eFF 密码:n3jq
CentOS镜像下载地址http://mirror.nsc.liu.se/centos-store/6.4/isos/x86_64/
1.点击新建虚拟机
2.选择稍后操作系统
3.选择64位CentOS的系统
4.选择安装位置(最好不要放C盘)
5.默认配置就好,点击下一步
6.点击自定义硬件
7.配置虚拟机的内存,我们的实验1G即可,电脑好的选择2G也可
8.选择虚拟化cpu(使用本机真实cpu)
9.选择加载的镜像,选1盘,如果自己下载的话2盘是一些软件,不需要加载
10.桥接和NAT模式才能上网,我选择的是桥接(使用自己的真实网卡)
11.选择第一个选项(安装或升级系统)
12.这一步选skip跳过即可
13.选择简体中文,点击下一步
14.选择英国美式,下一步
15.选择默认的基本存储设备,下一步
16.必须选择是,忽略所有数据
17.默认就行,下一步
18.自己输入密码(6位,字母数字),选择无论如何使用(因为我设置的密码不是安全的)
19.为了更好的了解linux,现在进行分盘(挂载点)
20.首先分给/home 2G(选择空闲点击创建,然后挂载点选/home)
21.必须给/boot一定的空间(系统使用,及时其他出现问题也能正常开机,一般200M即可)
22.接着给swap分4G空间(不是在挂载点选择,而是在文件系统类型选择)
23.最后所有空间都分给 / 挂载点(根目录)
24.选择将修改写入磁盘,点击下一步
25.默认即可,下一步
26.由于minimal存在一些兼容问题,选择Basic Server版本,点击下一步进行安装
27.安装完成,点击重新引导,重启虚拟机
28.先输入用户名:root 回车,接着输入密码(密码是不显示的,输入完回车就行)
29.现在一个虚拟机就终于安装完成了
1.将jdk解压到 /opt 下
tar -zxvf jdk-8u45-linux-x64.tar.gz -C /opt
注意如果你的虚拟机自带openjdk需要先卸载
rpm -qa | grep java //检查机器上的jdk
应该显示这一类的结果:
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64 javapackages-tools-3.4.1-11.el7.noarch java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
使用下面的命令删除上面列出的内容:
rpm -e --nodeps + 上面出现的内容
2.将hadoop解压到 /opt/hadoop 下
tar -zxvf hadoop-2.6.0-x64.tar.gz -C /opt/hadoop
没有hadoop目录的自己在/opt下创建
在/root /hadoop/目录下,建立tmp、hdfs/name、hdfs/data目录,执行如下命令:
mkdir /opt/hadoop/tmp mkdir /opt/hadoop/hdfs mkdir /opt/hadoop/hdfs/data mkdir /opt/hadoop/hdfs/name
##ssh的安装、无密码配置
1.检查
CentOS 默认已安装了 SSH client、SSH server,打开终端执行如下命令进行检验:
rpm -qa | grep ssh
成功显示出client、server版本的话则无需安装,若需要安装,则可以通过 yum 进行安装(安装过程中会让你输入 [y/N],输入 y 即可):
sudo yum install openssh-clients sudo yum install openssh-server
接着执行如下命令测试一下 SSH 是否可用:
ssh localhost
此时会有提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码,就登陆到本机了。
2.ssh无密码配置
上面这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆比较方便。
首先输入 exit 退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:
exit # 退出刚才的 ssh localhost cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost ssh-keygen -t rsa # 会有提示,都按回车就可以 cat id_rsa.pub >> authorized_keys # 加入授权 chmod 600 ./authorized_keys # 修改文件权限
此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了。
1.环境变量的配置
vim /etc/profile加入如下配置: export JAVA_HOME=/opt/jdk1.8.0_45 export HADOOP_HOME=/opt/hadoop/hadoop-2.6.0 exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar: exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
保存后,不要忘记执行如下命令使配置生效:
source /etc/profile
2.hosts文件的修改
vim /etc/hosts最后加入如下内容: 127.0.0.1 自己的主机名
3.hadoop配置
进入/opt/hadoop/hadoop-2.6.0/etc/hadoop目录
export JAVA_HOME=/opt/jdk1.8.0_45
<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> <description>HDFS的URI,文件系统://namenode标识:端口号</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/tmp</value> <description>namenode上本地的hadoop临时文件夹</description> </property> </configuration>
<configuration> <!—hdfs-site.xml--> <property> <name>dfs.name.dir</name> <value>/opt/hadoop/hdfs/name</value> <description>namenode上存储hdfs名字空间元数据 </descriptio> </property> <property> <name>dfs.data.dir</name> <value>/opt/hadoop/hdfs/data</value> <description>datanode上数据块的物理存储位置</description> </property> <property> <name>dfs.replication</name> <value>1</value> <description>副本个数,配置默认是3,应小于datanode机器数量</description> </property> </configuration>
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>${yarn.resourcemanager.hostname}:8099</value> </propert> </configuration>
#####4)配置mapred-site.xml
目录下没有mapred-site.xml,只有mapred-site.xml.template(模板),所以将其复制重命名为mapred-site.xml:
cp mapred-site.xml.template mapred-site.xml
然后再配置mapred-site.xml:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>${yarn.resourcemanager.hostname}:8099</value> </property> </configuration>
1.格式化namenode
hadoop namenode -format
2.启动hadoop
start-all.sh
3.启动验证
jps
应该输出如下的结果:
在浏览器输入虚拟机的ip地址,例如:192.168.31.0:50070,能够打开如下网页:
至此,hadoop环境安装已经全部完成
在此,使用WordCount的旧版api版本演示
1.编写WordCount.java,包含Mapper类和Reducec类
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.LongWritable; 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.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; public class WordCount { public static class WordCountMap extends Mapper<LongWritable, Text, Text, IntWritable> { private final IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer token = new StringTokenizer(line); while (token.hasMoreTokens()) { word.set(token.nextToken()); context.write(word, one); } } } public static class WordCountReduce extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = new Job(conf); job.setJarByClass(WordCount.class); job.setJobName("wordcount"); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); job.setMapperClass(WordCountMap.class); job.setReducerClass(WordCountReduce.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.waitForCompletion(true); } }
2.编译WordCount.java文件
javac WordCount.java -d 指定到你希望的目录下
此时目录下应该多出三个文件:WordCount.class、WordCount$WordCountMap.class、WordCount$WordCountReduce.class
3.将以上的.class文件打包成.Jar文件
jar -cvf 你希望指定的名字.jar *.class
4.创建hadoop的input和output目录
hadoop fs -mkdir input hadoop fs -mkdir output
5.将要输入的文件放进input目录下
hadoop fs -put 你要放入计算的文件 input
6.hadoop运行Jar文件并计算结果
hadoop jar WordCount.Jar WordCount input/file output (hadoop jar jar包路径 执行的主函数名(主类名,main方法所在类名) 输入目录名 输出目录名)
7.查看结果(前提是不报错,成功运行完)
成功的话,output目录下会出现一个part-r-xxxx
hadoop fs cat output/part-r-00000 #查看提交的结果
VMware Tools可以让虚拟机和你的主机之间共享一个文件夹,具体操作不在此赘述,点击链接自行按教程安装VMware Tools安装
Xshell可以方便开发,具体操作不在此赘述,点击链接自行按教程安装Xshell安装