kya*_*voy 8 scala hdfs mesos apache-spark mesosphere
我有Apache Mesos 0.22.1集群(3个主服务器和5个从服务器),在HA配置和Spark 1.5.1框架中运行Cloudera HDFS(2.5.0-cdh5.3.1).
当我尝试spark-submit编译的HdfsTest.scala示例应用程序(来自Spark 1.5.1源代码)时 - 它java.lang.IllegalArgumentException: java.net.UnknownHostException: hdfs
在执行程序日志中失败并出错.只有在我传递HDFS HA Path作为参数hdfs://hdfs/<file>
时才会出现此错误,当我通过时hdfs://namenode1.hdfs.mesos:50071/tesfile
- 一切正常.
我在启用TRACE日志记录后发现的是Spark驱动程序实际上hdfs://hdfs
正确读取了URL,但Spark执行器却没有.
我的Scala应用代码:
import org.apache.spark._
object HdfsTest {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setAppName("HdfsTest")
val sc = new SparkContext(sparkConf)
val file = sc.textFile(args(0))
val mapped = file.map(s => s.length).cache()
for (iter <- 1 to 10) {
val start = System.currentTimeMillis()
for (x <- mapped) { x + 2 }
val end = System.currentTimeMillis()
println("Iteration " + iter + " took " + (end-start) + " ms")
}
sc.stop()
}
}
Run Code Online (Sandbox Code Playgroud)
我编译此代码并以群集模式将jar文件提交给Spark:
/opt/spark/bin/spark-submit --deploy-mode cluster --class com.cisco.hdfs.HdfsTest http://1.2.3.4/HdfsTest-0.0.1.jar hdfs://hdfs/testfile
Run Code Online (Sandbox Code Playgroud)
我的spark-defaults.conf文件:
spark.master spark://1.2.3.4:7077
spark.eventLog.enabled true
spark.driver.memory 1g
Run Code Online (Sandbox Code Playgroud)
我的spark-env.sh文件:
export HADOOP_HOME=/opt/spark
export HADOOP_CONF_DIR=/opt/spark/conf
Run Code Online (Sandbox Code Playgroud)
我在/ opt/spark目录中的每个slave上都部署了spark.
我可以在控制台中使用"hdfs dfs -ls hdfs:// hdfs /"命令访问HDFS,而无需指定活动的namenode地址和端口.
core-site.xml:
----------------------------------------------------------------------
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hdfs</value>
</property>
</configuration>
hdfs-site.xml:
----------------------------------------------------------------------
<configuration>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.nameservice.id</name>
<value>hdfs</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>hdfs</value>
</property>
<property>
<name>dfs.ha.namenodes.hdfs</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hdfs.nn1</name>
<value>namenode1.hdfs.mesos:50071</value>
</property>
<property>
<name>dfs.namenode.http-address.hdfs.nn1</name>
<value>namenode1.hdfs.mesos:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hdfs.nn2</name>
<value>namenode2.hdfs.mesos:50071</value>
</property>
<property>
<name>dfs.namenode.http-address.hdfs.nn2</name>
<value>namenode2.hdfs.mesos:50070</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hdfs</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider </value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://journalnode1.hdfs.mesos:8485;journalnode2.hdfs.mesos:8485;journalnode3.hdfs.mesos:8485/hdfs</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>master.mesos:2181</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/lib/hdfs/data/jn</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///var/lib/hdfs/data/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///var/lib/hdfs/data/data</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.du.reserved</name>
<value>10485760</value>
</property>
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>41943040</value>
</property>
<property>
<name>dfs.namenode.safemode.threshold-pct</name>
<value>0.90</value>
</property>
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>60000</value>
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>10</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>20</value>
</property>
<property>
<name>dfs.image.compress</name>
<value>true</value>
</property>
<property>
<name>dfs.image.compression.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
<name>dfs.namenode.invalidate.work.pct.per.iteration</name>
<value>0.35f</value>
</property>
<property>
<name>dfs.namenode.replication.work.multiplier.per.iteration</name>
<value>4</value>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.client.read.shortcircuit.streams.cache.size</name>
<value>1000</value>
</property>
<property>
<name>dfs.client.read.shortcircuit.streams.cache.size.expiry.ms</name>
<value>1000</value>
</property>
<property>
<name>dfs.domain.socket.path</name>
<value>/var/run/hadoop-hdfs/dn._PORT</value>
</property>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我找到了解决方案 - 添加
spark.files file:///opt/spark/conf/hdfs-site.xml,file:///opt/spark/conf/core-site.xml
Run Code Online (Sandbox Code Playgroud)
到conf/spark-defaults.conf
每个从属解决了这个问题.
之后执行程序成功下载core-site.xml
并hdfs-site.xml
从驱动程序下载到执行程序.
tux*_*dna -4
java.net.UnknownHostException
表示在这种情况下提供名称的主机hdfs
无法解析为 IP 地址。
导致错误的原因 - java.net.UnknownHostException
您可以尝试检查是否解析为 IP 地址ping hdfs
。
归档时间: |
|
查看次数: |
11091 次 |
最近记录: |