Cloudera managerを使用してcloudera CDH 5をインストールしました。
簡単にできる
hadoop fs -ls /input/war-and-peace.txt
hadoop fs -cat /input/war-and-peace.txt
上記のこのコマンドは、コンソールにtxtファイル全体を印刷します。
今、spark Shellを起動して、
val textFile = sc.textFile("hdfs://input/war-and-peace.txt")
textFile.count
今、私はエラーを取得します
Scとして使用可能なSparkコンテキスト。
scala> val textFile = sc.textFile("hdfs://input/war-and-peace.txt")
2014-12-14 15:14:57,874 INFO [main] storage.MemoryStore (Logging.scala:logInfo(59)) - ensureFreeSpace(177621) called with curMem=0, maxMem=278302556
2014-12-14 15:14:57,877 INFO [main] storage.MemoryStore (Logging.scala:logInfo(59)) - Block broadcast_0 stored as values in memory (estimated size 173.5 KB, free 265.2 MB)
textFile: org.Apache.spark.rdd.RDD[String] = hdfs://input/war-and-peace.txt MappedRDD[1] at textFile at <console>:12
scala> textFile.count
2014-12-14 15:15:21,791 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 0 time(s); maxRetries=45
2014-12-14 15:15:41,905 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 1 time(s); maxRetries=45
2014-12-14 15:16:01,925 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 2 time(s); maxRetries=45
2014-12-14 15:16:21,983 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 3 time(s); maxRetries=45
2014-12-14 15:16:42,001 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 4 time(s); maxRetries=45
2014-12-14 15:17:02,062 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 5 time(s); maxRetries=45
2014-12-14 15:17:22,082 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 6 time(s); maxRetries=45
2014-12-14 15:17:42,116 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 7 time(s); maxRetries=45
2014-12-14 15:18:02,138 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 8 time(s); maxRetries=45
2014-12-14 15:18:22,298 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 9 time(s); maxRetries=45
2014-12-14 15:18:42,319 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 10 time(s); maxRetries=45
2014-12-14 15:19:02,354 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 11 time(s); maxRetries=45
2014-12-14 15:19:22,373 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 12 time(s); maxRetries=45
2014-12-14 15:19:42,424 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 13 time(s); maxRetries=45
2014-12-14 15:20:02,446 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 14 time(s); maxRetries=45
2014-12-14 15:20:22,512 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 15 time(s); maxRetries=45
2014-12-14 15:20:42,515 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 16 time(s); maxRetries=45
2014-12-14 15:21:02,550 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 17 time(s); maxRetries=45
2014-12-14 15:21:22,558 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 18 time(s); maxRetries=45
2014-12-14 15:21:42,683 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 19 time(s); maxRetries=45
2014-12-14 15:22:02,702 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 20 time(s); maxRetries=45
2014-12-14 15:22:22,832 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 21 time(s); maxRetries=45
2014-12-14 15:22:42,852 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 22 time(s); maxRetries=45
2014-12-14 15:23:02,974 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 23 time(s); maxRetries=45
2014-12-14 15:23:22,995 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 24 time(s); maxRetries=45
2014-12-14 15:23:43,109 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 25 time(s); maxRetries=45
2014-12-14 15:24:03,128 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 26 time(s); maxRetries=45
2014-12-14 15:24:23,250 INFO [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 27 time(s); maxRetries=45
Java.net.ConnectException: Call From dn1home/192.168.1.21 to input:8020 failed on connection exception: Java.net.ConnectException: Connection refused; For more details see: http://wiki.Apache.org/hadoop/ConnectionRefused
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:526)
at org.Apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.Java:783)
at org.Apache.hadoop.net.NetUtils.wrapException(NetUtils.Java:730)
at org.Apache.hadoop.ipc.Client.call(Client.Java:1415)
なぜこのエラーが発生したのですか? hadoopコマンドを使用して同じファイルを読み取ることができますか?
ここに解決策があります
sc.textFile("hdfs://nn1home:8020/input/war-and-peace.txt")
どのようにしてnn1home:8020を見つけましたか?
ファイルを検索するcore-site.xml
およびxml要素を探しますfs.defaultFS
sc.textFile("hdfs://...")
を使用する場合は、フルパス(絶対パス)を指定する必要があります。この例では、「nn1home:8020/..」
単純にしたい場合は、sc.textFile("hdfs:/input/war-and-peace.txt")
を使用します
それは1つだけです/
これは動作します:
val textFile = sc.textFile("hdfs://localhost:9000/user/input.txt")
ここでは、localhost:9000
hadoopからcore-site.xml
構成ファイルのfs.defaultFS
パラメータ値。
適切なURL文字列を渡していない。
hdfs://
-プロトコルタイプlocalhost
-IPアドレス(たとえば、127.56.78.4によって異なる場合があります)54310
- ポート番号/input/war-and-peace.txt
-ロードするファイルへの完全なパス。最後に、URLは次のようになります。
hdfs://localhost:54310/input/war-and-peace.txt
Spark-env.shで設定されたHADOOP_HOMEでsparkを開始した場合、sparkはhdfs設定ファイルを探す場所を知っています。
この場合sparkは既にnamenode/datanodeの場所を知っているので、以下だけがhdfsファイルにアクセスできます。
sc.textFie("/myhdfsdirectory/myfiletoprocess.txt")
以下のようにmyhdfsディレクトリを作成できます。
hdfs dfs -mkdir /myhdfsdirectory
ローカルファイルシステムから、以下のコマンドを使用してmyfiletoprocess.txtをhdfsディレクトリに移動できます。
hdfs dfs -copyFromLocal mylocalfile /myhdfsdirectory/myfiletoprocess.txt
val conf = new SparkConf().setMaster("local[*]").setAppName("HDFSFileReader")
conf.set("fs.defaultFS", "hdfs://hostname:9000")
val sc = new SparkContext(conf)
val data = sc.textFile("hdfs://hostname:9000/hdfspath/")
data.saveAsTextFile("C:\\dummy\")
上記のコードは、ディレクトリからすべてのhdfsファイルを読み取り、c:// dummyフォルダーにローカルに保存します。
これは私のために働いた
logFile = "hdfs://localhost:9000/sampledata/sample.txt"
ファイルパスまたはURLおよびhdfsポートの問題である可能性もあります。
解決策:最初にcore-site.xml
ファイルを場所$HADOOP_HOME/etc/hadoop
から開き、プロパティfs.defaultFS
の値を確認します。値がhdfs://localhost:9000
で、hdfsのファイルの場所が/home/usr/abc/fileName.txt
であるとします。次に、ファイルURLは次のようになります。hdfs://localhost:9000/home/usr/abc/fileName.txt
およびhdfsからファイルを読み取るために使用される次のコマンド:
var result= scontext.textFile("hdfs://localhost:9000/home/usr/abc/fileName.txt", 2)
私もCDH5を使用しています。私にとっては、「hdfs:// nn1home:8020」というフルパスは、何らかの奇妙な理由で機能していません。ほとんどの例は、そのようなパスを示しています。
私は次のようなコマンドを使用しました
val textFile=sc.textFile("hdfs:/input1/Card_History2016_3rdFloor.csv")
上記コマンドのo/p:
textFile: org.Apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at <console>:22
textFile.count
res1: Long = 58973
これは私にとってはうまくいきます。