列出hdfs文件系统所有的目录和文件
主节点上
子结点
是一样的
*为什么能登进 slave 02 的主机,但是 master 当中依然显示 slave 02 为 DeadNode?*
hadoop坏死节点的重启_hadoop3 子节点重启-CSDN博客
注意hadoop-daemon.sh
实际上位于 Hadoop 的 sbin
目录中,而不是 bin
目录中。因此,你需要将 sbin
目录也添加到 PATH
中
[hadoop@slave02 ~]$ echo 'export PATH=$PATH:/usr/local/hadoop/sbin' >> ~/.bashrc
[hadoop@slave02 ~]$ source ~/.bashrc
验证 hadoop-daemon.sh
路径 确认 hadoop-daemon.sh
脚本现在可以在 PATH
中找到:
[hadoop@slave02 ~]$ which hadoop-daemon.sh
bin/spark-submit --master spark://master:7077 --py-files /home/hadoop/Ex2_WordCount/WordCount.py
Error: Missing application resource
表示你在提交 Spark 作业时没有指定主应用程序文件(即你要运行的 Python 脚本)。spark-submit
命令需要知道你要运行的具体脚本文件。
bin/spark-submit --master spark://master:7077 --py-files /home/hadoop/Ex2_WordCount/WordCount.py /home/hadoop/Ex2_WordCount/WordCount.py
一直卡在正在连接远程?
pro2
No route to host-CSDN博客
sudo firewall-cmd --zone=public --query-port=36605/tcp
Caused by: io.netty.channel.AbstractChannel$AnnotatedNoRouteToHostException: No route to host: /192.168.0.132:44149
Caused by: java.net.NoRouteToHostException: No route to host
-
异常信息
java.io.IOException: Connection reset by peer
- 这是一个常见的网络错误,表示远程主机强制关闭了连接。具体原因可能有多种:
- 网络问题:网络不稳定或中断,导致连接被重置。
- 防火墙或安全软件:防火墙或安全软件阻止了连接。
- 远程主机崩溃:远程主机可能出现了故障或崩溃,导致连接被重置。
- 超时:连接超时,导致连接被重置。
- 资源限制:远程主机的资源(如文件描述符)达到上限,无法处理新的连接请求。
- 这是一个常见的网络错误,表示远程主机强制关闭了连接。具体原因可能有多种:
-
检查防火墙和安全软件:
- 确保防火墙或安全软件没有阻止必要的端口。
- 暂时禁用防火墙或安全软件,看看问题是否解决:
sh
sudo systemctl stop firewalld
-
检查网络连接:
- 确保网络连接稳定,没有丢包或延迟。
- 使用
ping
或traceroute
命令检查网络连通性:sh
ping 124.71.188.246 traceroute 124.71.188.246
-
优化 Spark 配置:
- 调整 Spark 的网络超时和重试机制,以提高连接的稳定性:
spark.network.timeout 120s
-
spark.io.compression.codec lz4
- 调整 Spark 的网络超时和重试机制,以提高连接的稳定性:
-
调整资源限制:
- 检查远程主机的资源限制,特别是文件描述符数量:
sh
ulimit -n
- 如果需要,可以增加文件描述符的限制:
sh
ulimit -n 10000
- 检查远程主机的资源限制,特别是文件描述符数量:
### 分析 `ping` 结果你提供的 `ping` 命令输出显示:```plaintext
[hadoop@master spark]$ ping 192.168.0.249
PING 192.168.0.249 (192.168.0.249) 56(84) bytes of data.
From 192.168.0.14 icmp_seq=1 Destination Host Unreachable
From 192.168.0.14 icmp_seq=2 Destination Host Unreachable
From 192.168.0.14 icmp_seq=3 Destination Host Unreachable
From 192.168.0.14 icmp_seq=4 Destination Host Unreachable
From 192.168.0.14 icmp_seq=5 Destination Host Unreachable
From 192.168.0.14 icmp_seq=6 Destination Host Unreachable
From 192.168.0.14 icmp_seq=7 Destination Host Unreachable
From 192.168.0.14 icmp_seq=8 Destination Host Unreachable
```### 解释- **Destination Host Unreachable**:这表示目标主机不可达。通常这意味着目标主机(192.168.0.249)没有响应,或者中间的路由器无法将数据包转发到目标主机。
- **From 192.168.0.14**:这表示 ICMP 回复来自中间的路由器(192.168.0.14),而不是目标主机。这表明问题可能出在目标主机本身,或者目标主机与路由器之间的连接有问题。### 可能的原因及解决方法1. **目标主机未启动或网络未连接**:- **检查目标主机**:确保目标主机(192.168.0.249)已经启动,并且网络连接正常。- **登录目标主机**:```shssh hadoop@192.168.0.249```2. **目标主机的网络配置问题**:- **检查网络配置**:确保目标主机的网络配置正确,特别是 IP 地址和网关设置。- **查看网络接口状态**:```ship addr show```3. **中间路由器问题**:- **检查中间路由器**:确保中间路由器(192.168.0.14)工作正常,没有配置错误。- **重启路由器**:```shsudo systemctl restart networking```4. **防火墙或安全组设置**:- **检查防火墙设置**:确保防火墙没有阻止 ICMP 请求。- **临时禁用防火墙**:```shsudo systemctl stop firewalld```### 示例1. **检查目标主机状态**:```shssh hadoop@192.168.0.249```2. **查看目标主机的网络配置**:```ship addr show```3. **检查中间路由器状态**:```shssh hadoop@192.168.0.14sudo systemctl status networking```4. **临时禁用防火墙**:```shsudo systemctl stop firewalld```### 结论`Destination Host Unreachable` 错误通常表示目标主机不可达,可能是由于目标主机未启动、网络配置错误、中间路由器问题或防火墙设置不当。通过上述步骤,你可以逐步排查并解决这个问题。如果问题依然存在,建议进一步检查集群的网络配置和日志,以获取更多线索。
### 日志解释你提供的日志信息如下:```plaintext
24/11/17 16:07:28 WARN TaskSetManager: Lost task 19.0 in stage 3.1 (TID 103) (192.168.0.14 executor 1): FetchFailed(BlockManagerId(3, 192.168.0.249, 42553, None), shuffleId=0, mapIndex=1, mapId=9, reduceId=19, message=
org.apache.spark.shuffle.FetchFailedExceptionat org.apache.spark.errors.SparkCoreErrors$.fetchFailedError(SparkCoreErrors.scala:437)at org.apache.spark.storage.ShuffleBlockFetcherIterator.throwFetchFailedException(ShuffleBlockFetcherIterator.scala:1239)at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:971)at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:86)at org.apache.spark.util.CompletionIterator.next(CompletionIterator.scala:29)at scala.collection.Iterator$$anon$11.nextCur(Iterator.scala:486)at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:492)at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460)at org.apache.spark.util.CompletionIterator.hasNext(CompletionIterator.scala:31)at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37)at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460)at scala.collection.Iterator.foreach(Iterator.scala:943)at scala.collection.Iterator.foreach$(Iterator.scala:943)at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)at org.apache.spark.api.python.PythonRDD$.writeIteratorToStream(PythonRDD.scala:322)at org.apache.spark.api.python.PythonRunner$$anon$2.writeIteratorToStream(PythonRunner.scala:751)at org.apache.spark.api.python.BasePythonRunner$WriterThread.$anonfun$run$1(PythonRunner.scala:451)at org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1928)at org.apache.spark.api.python.BasePythonRunner$WriterThread.run(PythonRunner.scala:282)
Caused by: java.io.IOException: Connecting to /192.168.0.249:42553 failed in the last 4750 ms, fail this connection directlyat org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:210)at org.apache.spark.network.netty.NettyBlockTransferService$$anon$2.createAndStart(NettyBlockTransferService.scala:131)at org.apache.spark.network.shuffle.RetryingBlockTransferor.transferAllOutstanding(RetryingBlockTransferor.java:173)at org.apache.spark.network.shuffle.RetryingBlockTransferor.lambda$initiateRetry$0(RetryingBlockTransferor.java:206)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:750)
```### 解释1. **警告信息**:```plaintext24/11/17 16:07:28 WARN TaskSetManager: Lost task 19.0 in stage 3.1 (TID 103) (192.168.0.14 executor 1)```- 这表示在阶段 3.1 中,任务 19.0(任务 ID 103)在执行器 1 上丢失。2. **异常信息**:```plaintextFetchFailed(BlockManagerId(3, 192.168.0.249, 42553, None), shuffleId=0, mapIndex=1, mapId=9, reduceId=19, message=org.apache.spark.shuffle.FetchFailedExceptionCaused by: java.io.IOException: Connecting to /192.168.0.249:42553 failed in the last 4750 ms, fail this connection directly```- `FetchFailedException` 表示在从 BlockManagerId 为 `(3, 192.168.0.249, 42553, None)` 的节点获取 shuffle 数据时失败。- 具体的 shuffle ID 为 0,mapIndex 为 1,mapId 为 9,reduceId 为 19。- `java.io.IOException` 表示在连接到 `192.168.0.249:42553` 时失败,连接尝试在 4750 毫秒内未成功。### 常见原因及解决方法1. **网络问题**:- **检查网络连接**:确保所有节点之间的网络连接稳定,没有丢包或延迟。- **使用 `ping` 和 `traceroute` 命令**:```shping 192.168.0.249traceroute 192.168.0.249```2. **防火墙或安全软件**:- **检查防火墙设置**:确保防火墙或安全软件没有阻止必要的端口。- **暂时禁用防火墙**:```shsudo systemctl stop firewalld```3. **资源不足**:- **检查资源使用情况**:确保执行器有足够的资源(如内存、CPU)来处理任务。- **调整 Spark 配置**:```propertiesspark.executor.memory 4gspark.executor.cores 2spark.network.timeout 120sspark.shuffle.io.maxRetries 10spark.shuffle.io.retryWait 10s```4. **BlockManager 故障**:- **检查 BlockManager 日志**:查看 BlockManager 的日志,寻找异常信息。- **重启 BlockManager**:如果 BlockManager 出现故障,可以尝试重启它。5. **Shuffle 文件损坏**:- **删除 Shuffle 文件**:删除有问题的 Shuffle 文件,让 Spark 重新生成。- **调整 Shuffle 文件存储位置**:```propertiesspark.local.dir /tmp/spark-local-dir```### 示例假设你已经检查了网络连接和资源使用情况,接下来可以尝试以下步骤:1. **检查网络连接**:```shping 192.168.0.249traceroute 192.168.0.249```2. **调整 Spark 配置**:编辑 `conf/spark-defaults.conf` 文件,增加以下配置:```propertiesspark.executor.memory 4gspark.executor.cores 2spark.network.timeout 120sspark.shuffle.io.maxRetries 10spark.shuffle.io.retryWait 10s```3. **重新提交 Spark 作业**:```shbin/spark-submit --master spark://master:7077 --py-files /home/hadoop/Ex2_WordCount/WordCount.py /home/hadoop/Ex2_WordCount/WordCount.py```### 结论`FetchFailedException` 通常与网络问题、防火墙设置、资源不足、BlockManager 故障或 Shuffle 文件损坏有关。通过上述步骤,你可以逐步排查和解决这个问题。如果问题依然存在,建议进一步检查集群的配置和日志,以获取更多线索。
nmap -p 7077 master
为什么在WEBUI当中显示有worker而且Alive,但是在日志中一直显示报错?
为什么在 WEBUI 当中有 alive 的 worker,是私网 ip,但是在终端缺 ping 不通?
./sbin/start-all.sh -h master
./sbin/start-all.sh spark://master_ip:7077
./sbin/sto-all.sh -h master
Caused by: io.netty.channel.AbstractChannel$AnnotatedNoRouteToHostException: No route to host: /192.168.0.132:36645
Caused by: java.net.NoRouteToHostException: No route to hostat sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:716)at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337)at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334)at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776)at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:750)
根据您提供的代码和错误信息,问题仍然出在加载 `bert-base-chinese` 模型的 `BertTokenizer` 时失败。为了确保在分布式环境下能够成功加载模型,我们可以采取以下措施:1. **确保所有节点上都安装了 `transformers` 和 `torch` 库**。
2. **预先下载模型文件并分发到所有节点**。
3. **使用 `--files` 参数将模型文件与 Spark 任务一起分发**。### 1. 安装必要的库确保所有节点上都安装了 `transformers` 和 `torch` 库:```sh
pip install transformers torch
```### 2. 预先下载模型文件在一台机器上下载 `bert-base-chinese` 模型文件,并将其分发到所有节点。可以使用以下命令下载模型:```sh
mkdir -p /path/to/models/bert-base-chinese
transformers-cli download bert-base-chinese --cache-dir /path/to/models/bert-base-chinese
```### 3. 修改代码以加载本地模型文件修改代码,使其从本地路径加载模型文件:```python
from pyspark import SparkConf, SparkContext
from transformers import BertTokenizer, BertModel
import torch
import jieba
import reDATAPATH = 'hdfs://master:9000/ex2/stop_words.txt'
SAVAPATH = '/home/hadoop/Ex2_WordCount/results/res.txt'
# 加载 BERT 模型和分词器
model_name = '/path/to/models/bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertModel.from_pretrained(model_name)# 打印模型结构
print(model)# 打印模型参数
for name, param in model.named_parameters():print(f"Parameter Name: {name}, Shape: {param.shape}")# 打印模型配置
print(model.config)conf = SparkConf().setAppName("ex2").setMaster("spark://master:7077").set("spark.executor.memory","4g")
sc = SparkContext(conf=conf)def getStopWords(stopWords_filePath):stopwords = sc.textFile(stopWords_filePath).collect()return stopwordsdef bertTokenize(text):# 使用 BERT 分词器进行分词tokens = tokenizer.tokenize(text)return tokensdef jiebaCut(answers_filePath):# 读取 answers.txtanswersRdd = sc.textFile(answers_filePath) # answersRdd 每一个元素对应 answers.txt 每一行# 利用 SparkRDD reduce() 函数, 合并所有回答str = answersRdd.reduce(lambda a, b: a + b)# 使用 BERT 分词器进行分词words_list = bertTokenize(str)return words_listdef wordcount():# 读取停用词表stopwords = getStopWords(DATAPATH)# 使用 BERT 分词words_list = jiebaCut(SAVAPATH)# 词频统计wordsRdd = sc.parallelize(words_list)resRdd = wordsRdd.filter(lambda word: word not in stopwords) \.filter(lambda word: len(word) > 1) \.map(lambda word: (word, 1)) \.reduceByKey(lambda a, b: a + b) \.sortBy(lambda x: x[1], ascending=False)return resRddif __name__ == '__main__':# 进行词频统计并可视化resRdd = wordcount()print(resRdd.take(10)) # 查看前10个
```### 4. 提交 Spark 任务使用 `spark-submit` 提交任务,并确保将模型文件与任务一起分发:```sh
spark-submit --master spark://master:7077 --files /path/to/models/bert-base-chinese/vocab.txt /home/hadoop/Ex2_WordCount/WordCountByBert.py
```### 注意事项1. **模型文件路径**:- 确保 `model_name` 路径正确指向本地模型文件的目录。- 如果模型文件较大,建议使用 `rsync` 或其他工具将模型文件分发到所有节点。2. **资源管理**:- 确保 Spark 配置有足够的资源(内存和 CPU)来处理 BERT 模型的计算需求。3. **性能优化**:- 在分布式环境中,频繁加载模型可能会导致性能下降。可以考虑将模型加载逻辑移到 `mapPartitions` 中,每个分区只加载一次模型。通过以上步骤,您应该能够在 Hadoop + Spark 环境中成功使用 BERT 模型进行分词。希望这些信息对您有所帮助!