centos02.com
html
vmware虛擬機上的centos安裝Hadoop
一。安裝vmware虛擬機java
下載: VMware Workstation Pro下載地址node
安裝linux
參考這篇文章web
二。虛擬機上安裝centosshell
打開vmware,點擊建立新的虛擬機apache
虛擬機名稱指的是給本身建立的這個虛擬機起個名字, 位置是指你要存放的地址。windows
這個根據本身電腦的內存大小決定, 由於我電腦的內存是8GB, 因此這裏我給虛擬機分配的內存爲1GBcentos
到這裏虛擬機建立完成,由於剛纔選擇的是建立空白虛擬機,因此這裏開始給虛擬機裝 centos操做系統bash
點擊‘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 ./
vi /etc/sysconfig/selinux
service iptables status 查看防火牆狀態
service iptables stop 關閉防火牆
chkconfig iptables off禁止防火牆開機自啓動
查看是否自帶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進行驗證
複製代碼
首先在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
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中
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);
}
}
複製代碼
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>
複製代碼