Tôi đang cố gắng chạy tập lệnh Spark thử nghiệm để kết nối Spark với hadoop. Các kịch bản là những sản phẩm sauVi phạm Hdfs từ Spark cung cấp lỗi TokenCache Không thể nhận hiệu trưởng Kerberos chính để sử dụng làm công cụ gia hạn
from pyspark import SparkContext
sc = SparkContext("local", "Simple App")
file = sc.textFile("hdfs://hadoop_node.place:9000/errs.txt")
errors = file.filter(lambda line: "ERROR" in line)
errors.count()
Khi tôi chạy nó với pyspark tôi nhận được
py4j.protocol.Py4JJavaError: An error occurred while calling o21.collect. : java.io.IOException: Can't get Master Kerberos principal for use as renewer at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesInternal(TokenCache.java:116) at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesInternal(TokenCache.java:100) at org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodes(TokenCache.java:80) at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:187) at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:251) at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:140) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:207) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:205) at scala.Option.getOrElse(Option.scala:120) at org.apache.spark.rdd.RDD.partitions(RDD.scala:205) at org.apache.spark.rdd.MappedRDD.getPartitions(MappedRDD.scala:28) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:207) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:205) at scala.Option.getOrElse(Option.scala:120) at org.apache.spark.rdd.RDD.partitions(RDD.scala:205) at org.apache.spark.api.python.PythonRDD.getPartitions(PythonRDD.scala:46) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:207) at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:205) at scala.Option.getOrElse(Option.scala:120) at org.apache.spark.rdd.RDD.partitions(RDD.scala:205) at org.apache.spark.SparkContext.runJob(SparkContext.scala:898) at org.apache.spark.rdd.RDD.collect(RDD.scala:608) at org.apache.spark.api.java.JavaRDDLike$class.collect(JavaRDDLike.scala:243) at org.apache.spark.api.java.JavaRDD.collect(JavaRDD.scala:27) 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 py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379) at py4j.Gateway.invoke(Gateway.java:259) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:207) at java.lang.Thread.run(Thread.java:744)
Điều này xảy ra bất chấp sự thật rằng
- tôi đã thực hiện một kinit và một chương trình klist Tôi có các mã thông báo chính xác
- khi tôi phát hành ./bin/hadoop fs -ls hdfs: //hadoop_node.place: 9000/errs.txt nó sho ws file
- Cả client hadoop địa phương và tia lửa có tập tin cấu hình tương tự
Lõi-site.xml trong tia lửa/conf và thư mục hadoop/conf là sau (đã nhận nó từ một trong những các nút hadoop)
<configuration>
<property>
<name>hadoop.security.auth_to_local</name>
<value>
RULE:[1:$1](.*@place)s/@place//
RULE:[2:$1/[email protected]$0](.*/[email protected])s/^([a-zA-Z]*).*/$1/
RULE:[2:$1/[email protected]$0](.*/[email protected])s/^([a-zA-Z]*).*/$1/
RULE:[2:$1/[email protected]$0](.*/[email protected])s/^([a-zA-Z]*).*/$1/
RULE:[2:$1/[email protected]$0](.*/[email protected])s/^([a-zA-Z]*).*/$1/
RULE:[2:$1/[email protected]$0](.*/[email protected])s/^([a-zA-Z]*).*/$1/
RULE:[2:$1/[email protected]$0](.*/[email protected])s/^([a-zA-Z]*).*/$1/
RULE:[2:$1/[email protected]$0](.*/[email protected])s/^([a-zA-Z]*).*/$1/
RULE:[2:nobody]
DEFAULT
</value>
</property>
<property>
<name>net.topology.node.switch.mapping.impl</name>
<value>org.apache.hadoop.net.TableMapping</value>
</property>
<property>
<name>net.topology.table.file.name</name>
<value>/etc/hadoop/conf/topology.table.file</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://server.place:9000/</value>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>*</value>
</property>
</configuration>
Ai đó có thể chỉ ra những gì tôi bị thiếu?
Mọi hoạt động của Spark cũng có cấu hình không? –
Spark chạy ở chế độ phân phối giả để chỉ có một máy chủ/nút – ndp
Bạn vẫn sẽ có một vài JVM đang chạy: ứng dụng của bạn, Spark master, Spark worker và executor. Tôi nghĩ rằng ứng dụng của bạn và người thực hiện sẽ là những người truy cập HDFS, vì vậy bạn cần phải chắc chắn rằng họ đã tải cấu hình đúng. Bạn có thể in 'Hệ thống.getProperties' trên trình kiểm tra để kiểm tra. –