Câu hỏi này không đề cập đến việc phân phối các lọ trong toàn bộ cụm để người lao động sử dụng chúng.Các vấn đề Hadoop HADOOP_CLASSPATH
Nó đề cập đến việc chỉ định một số thư viện bổ sung trên máy khách. Để cụ thể hơn: Tôi đang cố gắng để chạy lệnh sau để truy xuất nội dung của một SequenceFile:
/path/to/hadoop/script fs -text /path/in/HDFS/to/my/file
Nó ném cho tôi lỗi này: text: java.io.IOException: WritableName can't load class: util.io.DoubleArrayWritable
Tôi có một lớp có thể ghi tên DoubleArrayWritable. Trong thực tế, trên một máy tính khác tất cả mọi thứ hoạt động tốt.
Tôi đã cố gắng đặt HADOOP_CLASSPATH
để bao gồm lọ chứa lớp đó nhưng không có kết quả. Trên thực tế, khi chạy:
/path/to/hadoop/script classpath
Kết quả không chứa bình mà tôi đã thêm vào HADOOP_CLASSPATH.
Câu hỏi đặt ra là: làm thế nào để bạn xác định thư viện thêm khi chạy Hadoop (theo nghĩa thêm các thư viện khác hơn so với những người mà kịch bản hadoop bao gồm tự động trong classpath)
Một số biết thêm mà có thể giúp:
- tôi không thể thay đổi kịch bản hadoop.sh (hay bất kỳ kịch bản liên quan)
- tôi không thể sao chép thư viện của tôi để thư mục/lib dưới thư mục cài đặt hadoop
- Trong hadoop-env.sh mà là ru n từ hadoop.sh có dòng này:
export HADOOP_CLASSPATH=$HADOOP_HOME/lib
mà có lẽ giải thích tại sao vi sai HADOOP_CLASSPATH của tôi bị bỏ qua.
có nhưng kịch bản hadoop thực hiện điều này: xuất khẩu HADOOP_CLASSPATH = $ HADOOP_HOME/lib. Nó viết lại HADOOP_CLASSPATH của tôi – Razvan
@Razvan xem câu trả lời cập nhật của tôi –
như tôi đã nói, tôi không muốn đặt đường dẫn lớp "phân tán". Tôi chỉ muốn đặt classpath trên máy khách – Razvan