hadoop-3.1.3簡單部署和測試(mac os)

1.下載3.1.3的hadoop 列表

cd /Users/caolei/Desktop/big-data/tools
wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
  1. 解壓
tar -zxvf hadoop-3.1.3.tar.gz
mv hadoop-3.1.3.tar.gz ../ 

3.啟動hadoop. 需要安裝好JDK.

cd hadoop-3.1.3
bin/hadoop
  1. 獨立運行:直接調用hadoop傳入要處理的文件運算并輸出.
  mkdir input
  cp etc/hadoop/*.xml input
  bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
  cat output/*

至此完畢.直接提交一個java包,和輸入輸出參數.完成運算.

5.偽分布式運行:后臺運行hadoop進程并通過提交作業(yè)來完成運算.
6.需要修改兩個配置

vi etc/hadoop/core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

vi etc/hadoop/hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

7.需要設置ssh不需要密碼就可以登錄,因為集群模式下應該是通過ssh來服務器間通訊的.
先來檢查一下

ssh localhost

如果成功就可以直接跳過了.如果不成功. 設置本地ssh可以免密碼登錄本地服務器.

  $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  $ chmod 0600 ~/.ssh/authorized_keys
  1. 初始化并啟動hdfs.啟動后可以在http://localhost:9870/查看到hdfs的webui
bin/hdfs namenode -format
sbin/start-dfs.sh

9.創(chuàng)建hdfs文件夾用來輸入和輸出

  $ bin/hdfs dfs -mkdir /user
  $ bin/hdfs dfs -mkdir /user/<username>

10.復制需要測試的數據到input文件夾

  $ bin/hdfs dfs -mkdir input
  $ bin/hdfs dfs -put etc/hadoop/*.xml input

11.提交任務

  $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'

12.獲取結果

  $ bin/hdfs dfs -get output output
  $ cat output/*
或者直接查看hdfs上的內容
$ bin/hdfs dfs -cat output/*

13.關閉hdfs

sbin/stop-dfs.sh

14.單節(jié)點的YARN模式
15.修改兩處配置, 需要啟動hdfs并創(chuàng)建文件夾.

etc/hadoop/mapred-site.xml:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>
etc/hadoop/yarn-site.xml:

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

16.啟動yarn集群.可以在http://localhost:8088/查看webui

$ sbin/start-yarn.sh

17.運行任務

18.關閉集群

sbin/stop-yarn.sh
  1. 未完. 創(chuàng)建自己的hadoop jar任務并提交.yarn集群創(chuàng)建和管理.

  1. 例子: WordCount v1.0
//導入ioexception
import java.io.IOException;
//分詞
import java.util.StringTokenizer;
//hadoopconfig
import org.apache.hadoop.conf.Configuration;
//fs 路徑
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;

public class WordCount {
//分詞靜態(tài)函數
  public static class TokenizerMapper
       extends Mapper<Object, Text, Text, IntWritable>{

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();
//靜態(tài)函數map
    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.
        context.write(word, one);
      }
    }
  }
//靜態(tài)類 繼承Reducer類型為文本,可寫整數...
  public static class IntSumReducer
       extends Reducer<Text,IntWritable,Text,IntWritable> {
//保存結果的變量
    private IntWritable result = new IntWritable();
//關鍵函數匿名函數.key 值 內容類型.
    public void reduce(Text key, Iterable<IntWritable> values,
                       Context context
                       ) throws IOException, InterruptedException {
//sum
      int sum = 0;
//遍歷值 每個值為val 累加.
      for (IntWritable val : values) {
        sum += val.get();
      }
//結果字段寫上sum
      result.set(sum);
//內容寫 key,值
      context.write(key, result);
    }
  }

//Main函數.從這里執(zhí)行.
  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
//創(chuàng)建一個實例名稱
    Job job = Job.getInstance(conf, "word count");
//根據當前類來設置需要的Jar
    job.setJarByClass(WordCount.class);
//使用分詞器映射
    job.setMapperClass(TokenizerMapper.class);
//使用整數相加來進行歸并
    job.setCombinerClass(IntSumReducer.class);
//再次使用整數相加來進行聚合
    job.setReducerClass(IntSumReducer.class);
//設置輸出Key
    job.setOutputKeyClass(Text.class);
//設置輸出值
    job.setOutputValueClass(IntWritable.class);
//輸入文件
    FileInputFormat.addInputPath(job, new Path(args[0]));
//輸出文件
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
//退出.
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

基本能看懂,就是寫了一個map函數一個reducer函數.
對每一行做處理,先分詞,再對每一行進行計數.我靠那時候寫的很痛苦啊.相當于嵌套兩個java函數進去對每行數據進行映射.對映射結果進行運算.對比使用spark scral DF sql 會好寫很多..但是如果原始文件是純文本,對列進行操作會更復制.難怪只是基礎,構建上層的spark之類工具進行轉意.會有什么好處么.深入之后再說吧.

需要設置幾個環(huán)境變量

//Java_Home java安裝的目錄
export JAVA_HOME=/usr/java/default
//Path增加Java的執(zhí)行命令
export PATH=${JAVA_HOME}/bin:${PATH}
//增加編譯時HADOOP_CLASSPATH 需要的類庫.
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar

編譯

//執(zhí)行hadoop 編譯當前文件夾下的java類.同時使用com.sun.tools.javac.Main 為命名空間.
$ bin/hadoop com.sun.tools.javac.Main WordCount.java
//使用jar打包 成wc.jar 將當前文件夾下編譯出來的類.
$ jar cf wc.jar WordCount*.class


在hdfs上創(chuàng)建輸入和輸出文件夾

/user/joe/wordcount/input - input directory in HDFS
/user/joe/wordcount/output - output directory in HDFS

../bin/hadoop fs -mkdir /user/charlie/input
../bin/hadoop fs -mkdir /user/charlie/output

創(chuàng)建一些測試文本

$ bin/hadoop fs -ls /user/joe/wordcount/input/
/user/joe/wordcount/input/file01
/user/joe/wordcount/input/file02

$ bin/hadoop fs -cat /user/joe/wordcount/input/file01
Hello World Bye World

$ bin/hadoop fs -cat /user/joe/wordcount/input/file02
Hello Hadoop Goodbye Hadoop

運行應用:

$ bin/hadoop jar wc.jar WordCount /user/joe/wordcount/input /user/joe/wordcount/output

查看輸出:

$ bin/hadoop fs -cat /user/joe/wordcount/output/part-r-00000
Bye 1
Goodbye 1
Hadoop 2
Hello 2
World 2

當前執(zhí)行好像環(huán)境變量中存在之前設置的路徑.所以需要重新設置.
先來看看基本的 映射-聚合 任務怎么寫.以及使用IDEA怎么快速寫這種任務. 再往后就直接可以條到Spark中玩了.畢竟速度快很多.再再然后就是可以跑到Zeppline中玩.畢竟更更方便.

使用IDEA進行Hadoop Job編寫.

可以參考這個做一遍. 主要是Maven和 IDEA.以及Java的打包運行之類,習慣一遍就好了.
http://www.reibang.com/p/f55142420985

使用IDEA進行Spark Job編寫.

使用IDEA進行Flink Job編寫.

最后試試直接使用vscode編寫.測試和部署,反正都是Maven項目.應該都是一樣的.

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市徐鹤,隨后出現的幾起案子忙灼,更是在濱河造成了極大的恐慌漫贞,老刑警劉巖革半,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件医增,死亡現場離奇詭異谆构,居然都是意外死亡蒜胖,警方通過查閱死者的電腦和手機消别,發(fā)現死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門抛蚤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寻狂,你說我怎么就攤上這事岁经。” “怎么了蛇券?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵缀壤,是天一觀的道長。 經常有香客問我纠亚,道長塘慕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任蒂胞,我火速辦了婚禮图呢,結果婚禮上,老公的妹妹穿的比我還像新娘骗随。我一直安慰自己蛤织,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布鸿染。 她就那樣靜靜地躺著指蚜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涨椒。 梳的紋絲不亂的頭發(fā)上摊鸡,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音蚕冬,去河邊找鬼免猾。 笑死,一個胖子當著我的面吹牛囤热,可吹牛的內容都是我干的掸刊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赢乓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了石窑?” 一聲冷哼從身側響起牌芋,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎松逊,沒想到半個月后躺屁,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡经宏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年犀暑,在試婚紗的時候發(fā)現自己被綠了驯击。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡耐亏,死狀恐怖徊都,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情广辰,我是刑警寧澤暇矫,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站择吊,受9級特大地震影響李根,放射性物質發(fā)生泄漏。R本人自食惡果不足惜几睛,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一房轿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧所森,春花似錦囱持、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吼蚁,卻和暖如春凭需,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肝匆。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工粒蜈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旗国。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓枯怖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親能曾。 傳聞我的和親對象是個殘疾皇子度硝,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容