系统:Ubuntu14.04(64位)
Hadoop安装包:hadoop-2.5.1.tar.gz
Java jdk:jdk1.8.5
Eclipse: eclipse-standard-luna-R-linux-gtk-x86_64.tar.gz
Eclipse上的hadoop插件:hadoop2x-eclipse-plugin-master.zip
sudo addgroup hadoop
sudo adduser –ingroup hadoop hadoop:按照提示输入向hadoop用户组新增的hadoop 用户密码。
输入:sudo gedit /etc/sudoers
回车,打开sudoers文件
给hadoop用户赋予和root用户同样的权限:
在此行 root All = (ALL:ALL) ALL 后添加一行:
hadoop All = (ALL:ALL) ALL (意思:允许hadoop用户sudo运行任何命令)
保存sudoers文件
输入:sudo apt-get install openssh-server
安装完成后,启动服务:sudo /etc/init.d/ssh start
查看服务是否正确启动:ps -e | grep ssh
设置免密码登录,生成公钥和私钥:ssh-keygen -t rsa -P "" (一直按回车,此时会在/home/hdoop/.ssh下生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥。)
紧接着,将公钥追加到authorized_keys中,它用户保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容:
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
登录ssh(测试是不是无密码登录,若提示密码登录,则按ssh配置步骤重新配置):
ssh localhost
退出 ssh登录,输入:exit(退出连接)
(1)把下载的jdk安装包解压到/usr/local/jvm/目录下:
切换目录:cd /usr/local/jvm/ (其他路径也可以)
解压文件:sudo tar -zxf jdk-8u25-linux-x64.tar.gz
(2)设置jdk环境
· 打开/etc/profile:
sudo gedit /etc/profile
· 加入以下代码(根据实际安装目录更改路径):
export JAVA_HOME=/usr/local/jvm/jdk1.8.0_25
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使环境变量生效(不过推荐最好还是重启一下):
source /etc/profile
测试是否可行:
java -version
输出
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b14)
Java HotSpot(TM) 64-Bit Server VM
表示安装成功
解压hadoop2.5.1,并重命名为hadoop文件夹:
sudo tar xzf hadoop-2.5.1-x64.tar.gz
sudo mv hadoop-2.5.1 /usr/local/hadoop
赋予用户对该文件夹的读写权限:
sudo chmod 774 /usr/local/hadoop
update-alternatives --config java(可以使用该命令行查看安装路径为:/usr/lib/jvm/jdk)
配置.bashrc文件:
sudo gedit ~/.bashrc(该命令会打开该文件的编辑窗口,在文件末尾追加下面内容,然后保存,关闭编辑窗口。)
#HADOOP VARIABLES START
export JAVA_HOME=/usr/lib/jvm/ jdk1.8.0_25
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$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
exportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
exportHADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
#HADOOP VARIABLES END
执行下面命,使添加的环境变量生效:
source~/.bashrc
执行下面命令,打开该文件的编辑窗口
sudo gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh
找到JAVA_HOME变量,修改此变量如下
export JAVA_HOME=/usr/lib/jvm/ jdk1.8.0_25
/usr/local/hadoop/etc/hadoop/core-site.xml包含了hadoop启动时的配置信息。
在编辑器中打开此文件:
sudo gedit /usr/local/hadoop/etc/hadoop/core-site.xml
在该文件的
其中,name是fs.default的值表示hdfs路径的逻辑名称
保存、关闭编辑窗口。
/usr/local/hadoop/etc/hadoop/hdfs-site.xml用来配置集群中每台主机都可用,指定主机上作为namenode和datanode的目录。
也可以在别的路径下创建上图的文件夹,名称也可以与上图不同,但是需要和hdfs-site.xml中的配置一致。针对于一个伪节点:
编辑器打开hdfs-site.xml:sudo gedit hdfs-site.xml
在该文件的
保存、关闭编辑窗口
/usr/local/hadoop/etc/hadoop/yarn-site.xml包含了MapReduce启动时的配置信息。
编辑器中打开此文件 : sudo gedit yarn-site.xml
在该文件的
名称yarn.nodemanager.aux-services在hadoop2.5.1版本中是mapreduce_shuffle,一定要看清楚。
保存、关闭编辑窗口
默认情况下,/usr/local/hadoop/etc/hadoop/文件夹下有mapred.xml.template文件,我们要复制该文件,并命名为mapred.xml,该文件用于指定MapReduce使用的框架。
复制并重命名
cp mapred-site.xml.template mapred-site.xml
编辑器打开此新建文件
sudo gedit mapred-site.xml
在该文件的
其中,名称mapreduce.framework.name指的是使用yarn运行mapreduce程序。
保存、关闭编辑窗口
hdfs namenode -format
只需要执行一次即可,如果在hadoop已经使用后再次执行,会清除掉hdfs上的所有数据。
经过上文所描述配置和操作后,下面就可以启动这个单节点的集群
sbin/start-dfs.sh
执行该命令时,如果有yes/no提示,输入yes,回车即可。
接下来,执行:
sbin/start-yarn.sh
执行完这两个命令后,Hadoop会启动并运行 (或者用start-all.sh替代上述两个执行命令)
必须包括以下进程:
NameNode
SecondaryNameNode
NodeManager
JPS
ResourceManagger
DataNode
步骤12中的过程,2), 3),4)全部正确则说明hadoop配置基本正确。
在dfs上创建input目录
bin/hadoop fs -mkdir -p input
把hadoop目录下的file.txt拷贝到dfs新建的input里: hadoop fs -copyFromLocal file.txt input
运行WordCount
hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.5.1-sources.jarorg.apache.hadoop.examples.WordCount input output
运行完毕后,查看单词统计结果
hadoop fs -cat output/*
例如安装到/usr/local,即/usr/local/eclipse(tar xzf…)
下载地址:http://pan.baidu.com/s/1mgiHFok
此zip文件包含了源码,我们使用使用编译好的jar即可,解压后,release文件夹中的hadoop.eclipse-kepler-plugin-2.2.0.jar就是编译好的插件。
如果插件安装成功,打开Windows—Preferences后,在窗口左侧会有HadoopMap/Reduce选项,点击此选项,在窗口右侧设置Hadoop安装路径。
打开Windows—Open Perspective—Other , 选择Map/Reduce,点击OK.
点击Map/ReduceLocation选项卡,点击右边小象图标,打开HadoopLocation配置窗口:
输入LocationName,任意名称即可.配置Map/ReduceMaster和DFSMastrer,Host和Port配置成与core-site.xml的设置一致即可。
点击"Finish"按钮,关闭窗口。
点击左侧的DFSLocations—>myhadoop(上一步配置的locationname),如能看到user,表示安装成功
启动hadoop后,打开Eclipse菜单中File—>Project,选择Map/ReduceProject,输入项目名称WordCount等。
在WordCount项目里新建class,名称为WordCount,代码如下:
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
importorg.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
importorg.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
importorg.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 WordCount {
public static classTokenizerMapper extends Mapper
private final staticIntWritable one = new IntWritable(1);
private Text word = newText();
public void map(Object key,Text value, Context context) throws IOException, InterruptedException {
StringTokenizer itr = newStringTokenizer(value.toString());
while(itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word,one);
}}}
public static class IntSumReducerextends Reducer
private IntWritable result =new IntWritable();
public void reduce(Text key,Iterable
intsum = 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 = newConfiguration();
String[] otherArgs = newGenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage:wordcount
System.exit(2);
}
Job job = new Job(conf,"word count");
job.setJarByClass(WordCount.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);
}}
运行
1、建立输入文件夹input
hadoop fs -mkdir input
2、拷贝本地README.txt到HDFS的input里
hadoop fs -copy FromLocal /usr/local/hadoop/README.txt input
3、点击WordCount.java,右键,点击RunAs—>Run Configurations,配置运行参数,即输入和输出文件夹
hdfs://localhost:9000/user/hadoop/input hdfs://localhost:9000/user/hadoop/output
点击Run按钮,运行程序。
4、运行完成后,查看运行结果
方法1:
hadoop fs -ls output
可以看到有两个输出结果,_SUCCESS和part-r-00000
执行hadoop fs -cat output/*
方法2:
展开DFSLocations,双击打开part-r00000查看结果