2015-06-08 3 views
0

У меня есть установка искрового кластера с использованием сценария искры EC2. Я настраиваю кластер, и теперь я пытаюсь поместить файл в HDFS, чтобы у меня мог работать мой кластер.Использование HDFS с Apache Spark на Amazon EC2

На моем хозяине у меня есть файл data.txt. Я добавил его в HDFS, делая ephemeral-hdfs/bin/hadoop fs -put data.txt /data.txt

Теперь в моем коде, у меня есть:

JavaRDD<String> rdd = sc.textFile("hdfs://data.txt",8); 

я получаю исключение при этом:

Exception in thread "main" java.net.UnknownHostException: unknown host: data.txt 
    at org.apache.hadoop.ipc.Client$Connection.<init>(Client.java:214) 
    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1196) 
    at org.apache.hadoop.ipc.Client.call(Client.java:1050) 
    at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:225) 
    at com.sun.proxy.$Proxy6.getProtocolVersion(Unknown Source) 
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:396) 
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:379) 
    at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:119) 
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:238) 
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:203) 
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89) 
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1386) 
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:66) 
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1404) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:254) 
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:187) 
    at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:176) 
    at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:208) 
    at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:203) 
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219) 
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217) 
    at scala.Option.getOrElse(Option.scala:120) 
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217) 
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:32) 
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219) 
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217) 
    at scala.Option.getOrElse(Option.scala:120) 
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217) 
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:32) 
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219) 
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217) 
    at scala.Option.getOrElse(Option.scala:120) 
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217) 
    at org.apache.spark.RangePartitioner.<init>(Partitioner.scala:123) 
    at org.apache.spark.rdd.OrderedRDDFunctions.sortByKey(OrderedRDDFunctions.scala:62) 
    at org.apache.spark.rdd.RDD.sortBy(RDD.scala:488) 
    at org.apache.spark.api.java.JavaRDD.sortBy(JavaRDD.scala:188) 
    at SimpleApp.sortBy(SimpleApp.java:118) 
    at SimpleApp.main(SimpleApp.java:30) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:569) 
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:166) 
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:189) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:110) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 

Как правильно поместить этот файл в HDFS, чтобы я мог использовать свой кластер, чтобы начать работу с набором данных? Я также попытался просто добавить локальный путь к файлу, например, как:

JavaRDD<String> rdd = sc.textFile("/home/ec2-user/data.txt",8); 

Когда я делаю это, и представить работу, как:

./spark/bin/spark-submit --class SimpleApp --master spark://ec2-xxx.amazonaws.com:7077 --total-executor-cores 8 /home/ec2-user/simple-project-1.0.jar 

У меня только один исполнителя и рабочие узлы в кластере дон Кажется, что они участвуют. Я предположил, что это связано с тем, что я использовал локальный файл, а ec2 не имеет NFS.

ответ

2

Итак, первая часть, которую вам необходимо предоставить после // в hdfs://data.txt, является именем хоста, поэтому это будет hdfs://{active_master}:9000/data.txt (в случае, если это полезно в будущем, порт по умолчанию с сценариями spark-ec2 для постоянных hdfs - 9010).

0

AWS Elastic Map Сокращение теперь поддерживает искру и включает HDFS из коробки.

См. http://aws.amazon.com/elasticmapreduce/details/spark/, с более подробной информацией и пошаговым руководством в introductory blog post.

Spark in EMR использует EMRFS для прямого доступа к данным на S3, не требуя , чтобы скопировать его в HDFS.

Пошаговое руководство включает в себя пример загрузки данных с S3.

Смежные вопросы