hadoopがpigを使用してデータ分析中に発生した問題(10020番ポートの問題、接続拒否)

2806 ワード

hadoopアプリケーションのmapとreduceを作成するのは難しくありませんが、フレームワーク全体の作成を完全に制御するには、Java言語に非常に熟知する必要があります.私はずっとLinuxの下でCのプログラミングをしている人は、もっと私に合った方法を探すしかありません.Apacheプロジェクトの下にはhadoopを簡単に操作できるMapReduceのツールがあります.これがpigです.MapReduceに基づいてより簡単なプロセス言語抽象を作成し、Hadoopアプリケーションに構造化されたクエリー言語(SQL)に近いインタフェースを提供します.個別のMapReduceアプリケーションを作成する必要はありません.Pig Latin言語でスクリプトを作成し、クラスタ内でスクリプトを自動的に並列処理して配布できます.
Pigで使用される2つのモード:
1つ目はLocal(ローカル)モードで、HadoopまたはHadoop分散ファイルシステム(HDFS)に依存する必要はありません.このモードでは、すべての操作がローカルファイルシステムコンテキストの単一Java仮想マシン(JVM)上で実行されます.もう1つのモードは、Hadoopファイルシステムとクラスタを使用したMapReduceモードです.私は主にhadoopクラスタを利用してデータを分析しているので、MapReduceモードだけに注目しています.
また,pigとhiveのインストールとその注意点については,前述したブログで述べた.
マスターノードにpigをインストールした後、端末は次のように入力します.
pig

または
pig -x mapreduce

localモードで起動する場合は、次のように入力します.
pig -x local

次にデータをテストして、Linuxシステムの下でpasswdの情報を統計して、先にファイルをhdfsにコピーします
grunt> cd hdfs:///
grunt> cd /test
grunt> copyFromLocal /etc/passwd  passwd
Pig文を実行します.
grunt> passwd = LOAD '/test/passwd' USING PigStorage(':') AS (user:chararray,passwd:chararray, uid:int, gid:int, userinfo:chararray, home:chararray,shell:chararray);
grunt> DUMP passwd
で次の問題が発生しました.
[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias passwd. Backend error : javadoop/192.168.0.2 to master.hadoop:10020 failed on connection exception: java.net.ConnectException:     ; For more deta
Details at logfile: /usr/local/pig/pig_1433189043690.log
エラーメッセージを表示すると、10020番ポートが開いていない可能性があります.次のコマンドで表示します.
lsof | grep 10020
はやはり開いていないで、それからこのブログhadoopの常用ポートと定義方法を見て、この10020番ポートが
mapreduce.jobhistory.address.hadoopプロファイルmapred-siteを表示します.xmlにはすでにこの定義があります.
    <property>  
          <name>mapreduce.jobhistory.address</name>  
          <value>master.hadoop:10020</value>  
     </property>  
では、サービスはまだ起きていません.hadoopクラスタを起動したときにstart-allが可能です.shにはこれが含まれていませんか?では、手動で起動します.
mr-jobhistory-daemon.sh start historyserver

pigを起動して上記の手順を再実行すると、正常に実行されます.実行を容易にするためにpigコマンドをスクリプトに入れることができます.passwdと名付けられます.pig:
passwd = LOAD '/test/passwd' USING PigStorage(':') AS (user:chararray,passwd:chararray, uid:int, gid:int, userinfo:chararray, home:chararray,shell:chararray);
grp_shell = GROUP passwd BY shell;
counts = FOREACH grp_shell GENERATE group, COUNT(passwd);
DUMP counts;
その後、端末に次のように入力します.
pig passwd.pig
で完了します.